chore: cherry-pick upstream bug fixes since v1.0.0 - #5
Conversation
**Description** Update codecov/codecov-action from v6.0.0 to v6.0.2 to fix GPG signature verification failure in CI: https://github.com/envoyproxy/ai-gateway/actions/runs/27152233348/job/80174344507?pr=2114 Signed-off-by: yxia216 <yxia216@bloomberg.net>
…envoyproxy#2114) **Description** ### 1. Extend OpenAI embedding API to support multimodal embeddings Gemini Embedding 2 is a multimodal embedding model, but the OpenAI embedding API only supports strings or token arrays as input. To support multimodal inputs (images, audio, video, PDF), we extended the `/v1/embeddings` endpoint with a `messages` field, following the https://github.com/vllm-project/vllm/blob/2a16ece2d342c0c154a4949ad317b521f8c04ec4/vllm/entrypoints/pooling/embed/protocol.py#L113 ### 2. Gemini Embedding 2 `embedContent` endpoint support Gemini Embedding 2 models (`gemini-embedding-2-*`) use the `embedContent` endpoint: https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings, unlike older models (`text-embedding-004`, `gemini-embedding-001`) which use the `predict` endpoint. The translator auto-detects the endpoint based on model name. **`EmbeddingInputItem` is only supported with the predict endpoint.** The predict endpoint supports per-instance `task_type` and `title`: ```json { "instances": [ {"content": "query text", "task_type": "RETRIEVAL_QUERY"}, {"content": "doc text", "task_type": "RETRIEVAL_DOCUMENT", "title": "My Doc"} ] } ``` The `embedContent` endpoint does not support per-item task types — it accepts a single `content` with one global `taskType` via `embedContentConfig`. Accepting `EmbeddingInputItem` for `embedContent` would be misleading (users would expect per-item behavior), so we reject it with a clear error. Users should set `task_type` at the request level instead. **`task_type` limitation for `gemini-embedding-2`.** Per the doc: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings, `gemini-embedding-2` does not support the `task_type` field — the task must be included as a prompt instruction instead (e.g. `"task: search result | query: how to reset password"`). The API silently ignores `taskType` in `embedContentConfig`. We still send it if the user provides it, in case future `embedContent` models support it. **`embedContentConfig` vs deprecated top-level fields.** The REST API reference documents `taskType`, `outputDimensionality`, `autoTruncate` as deprecated top-level fields. The genai SDK v1.54+: https://github.com/googleapis/go-genai/blob/v1.54.0/models.go#L727 sends them via `embedContentConfig` instead. ### Batch processing limitation The Vertex AI REST API does not support batch embedding for `embedContent` models. Experimentally verified: 1. **`batchEmbedContents`** — 404 on all Vertex AI endpoints. This endpoint only exists on the Gemini API (`generativelanguage.googleapis.com`), not Vertex AI (`aiplatform.googleapis.com`). 2. **`embedContent` with `content` (singular)** — works, returns one embedding per request. 3. **`embedContent` with `contents` (plural)** — rejected. 4. **`embedContent` with multiple `parts`** — returns one aggregated embedding, not separate embeddings per part. `parts` are designed for combining modalities, not for batching. A possible workaround is fan-out (splitting batch inputs into multiple `embedContent` calls), but this is out of scope for the gateway. We expect Vertex AI to add `batchEmbedContents` support in the future. There should be little impact on performance: the inference engine is a batch processing engine regardless. Whether it receives a single request or batch requests, the engine batches internally. The only difference is whether the requests arrive in one HTTP call or multiple. --------- Signed-off-by: yxia216 <yxia216@bloomberg.net> Signed-off-by: hustxiayang <yangxiast@gmail.com> Co-authored-by: Dan Sun <dsun20@bloomberg.net> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io> Co-authored-by: Aaron Choo <achoo30@bloomberg.net>
**Description** Remove the deprecation banner from the 0.7 docs. **Related Issues/PRs (if applicable)** Related to: envoyproxy#2177 **Special notes for reviewers (if applicable)** N/A Signed-off-by: Ignasi Barrera <nacx@apache.org>
**Description** Update the compatibility matrix to specify EG v1.8.1+. Signed-off-by: Aaron Choo <achoo30@bloomberg.net>
…ners (envoyproxy#2194) **Description** Azure is strict about `scheme` header to be same as the TLS transport on which the request is being made. If the listener is an http listener, envoy forwards a request with `scheme: http` instead of `https`. This leads to requests getting dropped. The simple solution is to use `matchUpstream` which is what is being done in MCP backend listeners but missed in regular AI gateway route listeners. **Related Issues/PRs (if applicable)** Fixes envoyproxy#2095 Signed-off-by: Anurag Aggarwal <kanurag94@gmail.com>
…ackend HTTPRoute (envoyproxy#2134) **Description** When an `MCPRoute` has a `backendRef` with `securityPolicy.apiKey` configured (either via `secretRef` or `inline`), the controller resolves the secret and embeds the **plaintext API key** directly into the generated `HTTPRoute` resource. This happens in two places: 1. **Header injection** — the key is written as a literal value in an `HTTPRouteFilter` of type `RequestHeaderModifier` (e.g., `Authorization: Bearer <plaintext-token>`). 2. **Query parameter injection** — the key is appended to the URL path in a `URLRewrite` filter (e.g., `/mcp?api_key=<plaintext-token>`). fixes envoyproxy#2141 **Possible Solutions** 1. This can be solved for Header injection by using https://gateway.envoyproxy.io/docs/api/extension_types/#httpcredentialinjectionfilter. However, APIKey for `QueryParams` will still continue to be stored in plaintext. **Note: This PR implements this approach.** 2. By contrast, the existing `BackendSecurityPolicy` (used by `AIGatewayRoute` / `AIServiceBackend`) stores the resolved credential inside a Kubernetes **Secret** (the filter config secret consumed by extproc), which benefits from RBAC, encryption at rest, and audit logging. MCPRoute should adopt a similar approach. 3. Explore if we can add support for QueryParams in CredentialInjectionFilter in Envoy Gateway. **Affected code:** - internal/controller/mcp_route.go` **Testing** **Created MCPRoute with credential injection into Authorization header.** Credential got created and HTTPRouteFilter with Credential Injection filter got created. List tools and tool calls work as expected. Credential and filter got deleted on removing backend and deleting MCPRoute. **Created MCPRoute with credential injection into a custom header.** Credential got created and HTTPRouteFilter with Credential Injection filter got created. List tools and tool calls work as expected. Credential and filter got deleted on removing backend and deleting MCPRoute. **Created MCPRoute with inline API Key into Authorization header.** No change in behaviour. **Created MCPRoute with API Key injected into query param** No change in behaviour. --------- Signed-off-by: Aishwarya <aishwarya.raimule@nutanix.com> Signed-off-by: aishwaryaraimule21 <aishwarya.raimule@nutanix.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…oyproxy#2200) Bumps the go group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [github.com/anthropics/anthropic-sdk-go](https://github.com/anthropics/anthropic-sdk-go) | `1.43.0` | `1.45.0` | | [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) | `1.32.17` | `1.32.18` | | [github.com/modelcontextprotocol/go-sdk](https://github.com/modelcontextprotocol/go-sdk) | `1.6.0` | `1.6.1` | | [github.com/openai/openai-go/v3](https://github.com/openai/openai-go) | `3.35.0` | `3.37.0` | | [github.com/tetratelabs/func-e](https://github.com/tetratelabs/func-e) | `1.5.0` | `1.6.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.279.0` | `0.280.0` | | [google.golang.org/genai](https://github.com/googleapis/go-genai) | `1.57.0` | `1.58.0` | Updates `github.com/anthropics/anthropic-sdk-go` from 1.43.0 to 1.45.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/anthropics/anthropic-sdk-go/releases">github.com/anthropics/anthropic-sdk-go's releases</a>.</em></p> <blockquote> <h2>v1.45.0</h2> <h2>1.45.0 (2026-05-21)</h2> <p>Full Changelog: <a href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.1...v1.45.0">v1.44.1...v1.45.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> Add support for thinking-token-count beta for estimated tokens in thinking block deltas when streaming (<a href="https://github.com/anthropics/anthropic-sdk-go/commit/dedeb6d263a651d63c95bd360befbd53dd26ec12">dedeb6d</a>)</li> </ul> <h2>v1.44.1</h2> <h2>1.44.1 (2026-05-19)</h2> <p>Full Changelog: <a href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.0...v1.44.1">v1.44.0...v1.44.1</a></p> <h3>Bug Fixes</h3> <ul> <li><strong>runner:</strong> skip tool calls SessionToolRunner does not own (<a href="https://github.com/anthropics/anthropic-sdk-go/commit/93afc65f2f1b811d760f2e5149e13dd5eb328f79">93afc65</a>)</li> </ul> <h2>v1.44.0</h2> <h2>1.44.0 (2026-05-19)</h2> <p>Full Changelog: <a href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.43.0...v1.44.0">v1.43.0...v1.44.0</a></p> <h3>Features</h3> <ul> <li><strong>client:</strong> Add support for self-hosted sandboxes in CMA with sandbox helpers (<a href="https://github.com/anthropics/anthropic-sdk-go/commit/34354c43f329852a88682bb6665a1453754d61be">34354c4</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/anthropics/anthropic-sdk-go/blob/main/CHANGELOG.md">github.com/anthropics/anthropic-sdk-go's changelog</a>.</em></p> <blockquote> <h2>1.45.0 (2026-05-21)</h2> <p>Full Changelog: <a href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.1...v1.45.0">v1.44.1...v1.45.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> Add support for thinking-token-count beta for estimated tokens in thinking block deltas when streaming (<a href="https://github.com/anthropics/anthropic-sdk-go/commit/dedeb6d263a651d63c95bd360befbd53dd26ec12">dedeb6d</a>)</li> </ul> <h2>1.44.1 (2026-05-19)</h2> <p>Full Changelog: <a href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.0...v1.44.1">v1.44.0...v1.44.1</a></p> <h3>Bug Fixes</h3> <ul> <li><strong>runner:</strong> skip tool calls SessionToolRunner does not own (<a href="https://github.com/anthropics/anthropic-sdk-go/commit/93afc65f2f1b811d760f2e5149e13dd5eb328f79">93afc65</a>)</li> </ul> <h2>1.44.0 (2026-05-19)</h2> <p>Full Changelog: <a href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.43.0...v1.44.0">v1.43.0...v1.44.0</a></p> <h3>Features</h3> <ul> <li><strong>client:</strong> Add support for self-hosted sandboxes in CMA with sandbox helpers (<a href="https://github.com/anthropics/anthropic-sdk-go/commit/34354c43f329852a88682bb6665a1453754d61be">34354c4</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/anthropics/anthropic-sdk-go/commit/88310ccdb19419fb6c8b0fd2e99f1e3d8c74041e"><code>88310cc</code></a> release: 1.45.0</li> <li><a href="https://github.com/anthropics/anthropic-sdk-go/commit/4eb28e321282db071753c97d3223b092db9108d1"><code>4eb28e3</code></a> feat(api): Add support for thinking-token-count beta for estimated tokens in ...</li> <li><a href="https://github.com/anthropics/anthropic-sdk-go/commit/d138190aeae5568972430f9a6204875aa04097fc"><code>d138190</code></a> release: 1.44.1</li> <li><a href="https://github.com/anthropics/anthropic-sdk-go/commit/d0a73a50e70544b552f202d4e6f67eb45b9fd739"><code>d0a73a5</code></a> fix(runner): skip tool calls SessionToolRunner does not own</li> <li><a href="https://github.com/anthropics/anthropic-sdk-go/commit/288857308b47e48ee7d572506efffb568d514846"><code>2888573</code></a> release: 1.44.0 (<a href="https://redirect.github.com/anthropics/anthropic-sdk-go/issues/340">#340</a>)</li> <li>See full diff in <a href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.43.0...v1.45.0">compare view</a></li> </ul> </details> <br /> Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.17 to 1.32.18 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/db9f4e546dfe2f62a6bc3bf54b9da42ebace6372"><code>db9f4e5</code></a> Release 2026-05-22</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/34e7ddc9400e830a9ae226a7e3c2161e5ece4f19"><code>34e7ddc</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/f9db036cf7b3b8a1ea5eb67c3d296da4b48b6e2b"><code>f9db036</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/ae5eae1e3ec46433bd99496bfa6936f8f09a2e72"><code>ae5eae1</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/429dbdd2a35d325aabc5757edfc9ebf09c2ad12e"><code>429dbdd</code></a> Feat discover endpoint partition validation (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3410">#3410</a>)</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/ab4f5b60785064ec6346c922604d94b63d9c7299"><code>ab4f5b6</code></a> Release 2026-05-21</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/757a09909a97a15e5a481d9839b83f15b8fdc4bc"><code>757a099</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/02c8323ee6c99be82dae3a3923616756cb164525"><code>02c8323</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/f4ac954c5b3567f7918fbaa845bd05a8b211f54e"><code>f4ac954</code></a> Bump smithy-go version and update imports for evenstream protocoltests (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3420">#3420</a>)</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/6d937001e020def8b587dccbe5d803933ce57bfd"><code>6d93700</code></a> Add replace for credentials dependency added on go.mod (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3419">#3419</a>)</li> <li>Additional commits viewable in <a href="https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.17...config/v1.32.18">compare view</a></li> </ul> </details> <br /> Updates `github.com/modelcontextprotocol/go-sdk` from 1.6.0 to 1.6.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/modelcontextprotocol/go-sdk/releases">github.com/modelcontextprotocol/go-sdk's releases</a>.</em></p> <blockquote> <h2>v1.6.1</h2> <p>This release adds an MCPGODEBUG flag to opt out of the Content-Type check on POST requests.</p> <h2>Behavior Changes</h2> <p>Prior to v1.6.0 (v1.4.0...v1.5.0), the Content-Type check on POST requests was gated by the same <code>disablecrossoriginprotection</code> MCPGODEBUG flag as the cross-origin protection. In v1.6.0, the cross-origin protection was disabled by default (replaced by the opt-in <code>enableoriginverification</code> flag), but the Content-Type check was kept on unconditionally, leaving no way to disable it. This release restores an escape hatch for both the Streamable HTTP and SSE transports: setting <code>MCPGODEBUG=disablecontenttypecheck=1</code> skips the <code>Content-Type: application/json</code> validation on POST requests. See <a href="https://redirect.github.com/modelcontextprotocol/go-sdk/issues/957">#957</a>.</p> <h2>What's Changed</h2> <ul> <li>mcp: add MCPGPDEBUG for opt-in Content-Type check by <a href="https://github.com/guglielmo-san"><code>@guglielmo-san</code></a> in <a href="https://redirect.github.com/modelcontextprotocol/go-sdk/pull/972">modelcontextprotocol/go-sdk#972</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/modelcontextprotocol/go-sdk/compare/v1.6.0...v1.6.1">https://github.com/modelcontextprotocol/go-sdk/compare/v1.6.0...v1.6.1</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/modelcontextprotocol/go-sdk/commit/d454bbaf06a342aee5336df3370321d9cdec2478"><code>d454bba</code></a> mcp: add MCPGPDEBUG for opt-in Content-Type check (<a href="https://redirect.github.com/modelcontextprotocol/go-sdk/issues/972">#972</a>)</li> <li>See full diff in <a href="https://github.com/modelcontextprotocol/go-sdk/compare/v1.6.0...v1.6.1">compare view</a></li> </ul> </details> <br /> Updates `github.com/openai/openai-go/v3` from 3.35.0 to 3.37.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/openai/openai-go/releases">github.com/openai/openai-go/v3's releases</a>.</em></p> <blockquote> <h2>v3.37.0</h2> <h2>3.37.0 (2026-05-21)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.36.0...v3.37.0">v3.36.0...v3.37.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> api update (<a href="https://github.com/openai/openai-go/commit/7f7416ea4f6953a2861189dee6391515c3b995a9">7f7416e</a>)</li> <li><strong>api:</strong> manual updates (<a href="https://github.com/openai/openai-go/commit/d6465620413df87d971e7e37ae74bef4c70076b1">d646562</a>)</li> <li><strong>api:</strong> update OpenAPI spec or Stainless config (<a href="https://github.com/openai/openai-go/commit/b34b78a83433003a6168fffd175cc963ad719495">b34b78a</a>)</li> <li><strong>client:</strong> optimize json encoder for internal types (<a href="https://github.com/openai/openai-go/commit/93adc6e6247e8ce830152c3df0980a3154aa098a">93adc6e</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>go:</strong> format generated admin paths (<a href="https://github.com/openai/openai-go/commit/1dd8f5ec0adeeefef6a56068b5532ba5e3b3290e">1dd8f5e</a>)</li> <li><strong>go:</strong> format generated project permission paths (<a href="https://github.com/openai/openai-go/commit/b751c37ce2d6348545d75451dfc253dd7dda0f4f">b751c37</a>)</li> </ul> <h3>Chores</h3> <ul> <li><strong>api:</strong> docs updates (<a href="https://github.com/openai/openai-go/commit/08bc80ea58a19ba0725942c1f3afbcfb043851a0">08bc80e</a>)</li> </ul> <h2>v3.36.0</h2> <h2>3.36.0 (2026-05-13)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.35.0...v3.36.0">v3.35.0...v3.36.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> add service_tier parameter to response compact method (<a href="https://github.com/openai/openai-go/commit/bacd2c0bcf980e8d424d67446fb4d9c4ea897d24">bacd2c0</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>go:</strong> avoid panic when http.DefaultTransport is wrapped (<a href="https://github.com/openai/openai-go/commit/95a0250a9c770674f8deacb3a3fc1175e6808967">95a0250</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/openai/openai-go/blob/main/CHANGELOG.md">github.com/openai/openai-go/v3's changelog</a>.</em></p> <blockquote> <h2>3.37.0 (2026-05-21)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.36.0...v3.37.0">v3.36.0...v3.37.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> api update (<a href="https://github.com/openai/openai-go/commit/7f7416ea4f6953a2861189dee6391515c3b995a9">7f7416e</a>)</li> <li><strong>api:</strong> manual updates (<a href="https://github.com/openai/openai-go/commit/d6465620413df87d971e7e37ae74bef4c70076b1">d646562</a>)</li> <li><strong>api:</strong> update OpenAPI spec or Stainless config (<a href="https://github.com/openai/openai-go/commit/b34b78a83433003a6168fffd175cc963ad719495">b34b78a</a>)</li> <li><strong>client:</strong> optimize json encoder for internal types (<a href="https://github.com/openai/openai-go/commit/93adc6e6247e8ce830152c3df0980a3154aa098a">93adc6e</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>go:</strong> format generated admin paths (<a href="https://github.com/openai/openai-go/commit/1dd8f5ec0adeeefef6a56068b5532ba5e3b3290e">1dd8f5e</a>)</li> <li><strong>go:</strong> format generated project permission paths (<a href="https://github.com/openai/openai-go/commit/b751c37ce2d6348545d75451dfc253dd7dda0f4f">b751c37</a>)</li> </ul> <h3>Chores</h3> <ul> <li><strong>api:</strong> docs updates (<a href="https://github.com/openai/openai-go/commit/08bc80ea58a19ba0725942c1f3afbcfb043851a0">08bc80e</a>)</li> </ul> <h2>3.36.0 (2026-05-13)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.35.0...v3.36.0">v3.35.0...v3.36.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> add service_tier parameter to response compact method (<a href="https://github.com/openai/openai-go/commit/bacd2c0bcf980e8d424d67446fb4d9c4ea897d24">bacd2c0</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>go:</strong> avoid panic when http.DefaultTransport is wrapped (<a href="https://github.com/openai/openai-go/commit/95a0250a9c770674f8deacb3a3fc1175e6808967">95a0250</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/openai/openai-go/commit/8f01a93893a51fc300850dc311aa66c96467f47b"><code>8f01a93</code></a> Merge pull request <a href="https://redirect.github.com/openai/openai-go/issues/676">#676</a> from openai/release-please--branches--main--changes--...</li> <li><a href="https://github.com/openai/openai-go/commit/2db0d86948259932a76fe8df25a3a513c132f242"><code>2db0d86</code></a> release: 3.37.0</li> <li><a href="https://github.com/openai/openai-go/commit/ea245d8115372e980d442072c79436f991366348"><code>ea245d8</code></a> Merge pull request <a href="https://redirect.github.com/openai/openai-go/issues/991">#991</a> from stainless-sdks/dev/xuanqi/public-api-docs-enterp...</li> <li><a href="https://github.com/openai/openai-go/commit/1dd8f5ec0adeeefef6a56068b5532ba5e3b3290e"><code>1dd8f5e</code></a> fix(go): format generated admin paths</li> <li><a href="https://github.com/openai/openai-go/commit/7f7416ea4f6953a2861189dee6391515c3b995a9"><code>7f7416e</code></a> feat(api): api update</li> <li><a href="https://github.com/openai/openai-go/commit/b751c37ce2d6348545d75451dfc253dd7dda0f4f"><code>b751c37</code></a> fix(go): format generated project permission paths</li> <li><a href="https://github.com/openai/openai-go/commit/08bc80ea58a19ba0725942c1f3afbcfb043851a0"><code>08bc80e</code></a> chore(api): docs updates</li> <li><a href="https://github.com/openai/openai-go/commit/d6465620413df87d971e7e37ae74bef4c70076b1"><code>d646562</code></a> feat(api): manual updates</li> <li><a href="https://github.com/openai/openai-go/commit/b34b78a83433003a6168fffd175cc963ad719495"><code>b34b78a</code></a> feat(api): update OpenAPI spec or Stainless config</li> <li><a href="https://github.com/openai/openai-go/commit/efa3cc0d27ca02c86ecea59f34a7b731fdc1708f"><code>efa3cc0</code></a> codegen metadata</li> <li>Additional commits viewable in <a href="https://github.com/openai/openai-go/compare/v3.35.0...v3.37.0">compare view</a></li> </ul> </details> <br /> Updates `github.com/tetratelabs/func-e` from 1.5.0 to 1.6.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/tetratelabs/func-e/releases">github.com/tetratelabs/func-e's releases</a>.</em></p> <blockquote> <h2>v1.6.0</h2> <p>func-e 1.6.0 gives you yesterday's envoy main build via the "dev" version</p> <p>Before, testing pre-release Envoy with func-e meant compiling it yourself or using Docker, which only worked on Linux. Now you can install and run dev builds on all platforms the same way you would any tagged version.</p> <pre lang="bash"><code>$ ENVOY_VERSION=dev func-e run --version downloading https://archive.tetratelabs.io/envoy/download/dev/envoy-dev-darwin-arm64.tar.xz starting: /Users/codefromthecrypt/.local/share/func-e/envoy-versions/dev/bin/envoy with logs in /Users/codefromthecrypt/.local/state/func-e/envoy-runs/20260518_170024_807 <p>/Users/codefromthecrypt/.local/share/func-e/envoy-versions/dev/bin/envoy version: abbadd905fa486ff1085cf3bbe4f3b73eb6dd8e0/1.39.0-dev/Clean/RELEASE/BoringSSL</p> <p>$ func-e versions -a<br /> dev 2026-05-18 (a8d396eb)<br /> 1.38.0 2026-04-23<br /> 1.37.2 2026-04-10<br /> -- snip--<br /> </code></pre></p> <p>This works because envoy's version manifest was recently updated with a special "dev" key backed by a <a href="https://redirect.github.com/tetratelabs/archive-envoy/pull/70">daily pipeline job</a>, which archives linux from envoy's docker image, and builds macos from the same SHA.</p> <h2>Updating the "dev" build with the "dev-latest" alias.</h2> <p><code>dev</code> installs on demand like all other versions and stays put once pulled. The alias <code>dev-latest</code> compares the remote release date against the local install and re-downloads only when the build has changed. <code>func-e use dev-latest</code> persists "dev" in the version file, so it is a one-shot refresh, not a stored preference.</p> <h2>Why Use An Envoy "dev" Build?</h2> <p>Envoy releases are worth the wait, but they land about once a quarter. The dev build is for the gap between “merged” and “released”: you can try current Envoy mainline without building Envoy yourself or relying on a Linux-only Docker workflow.</p> <p>For example, Envoy 1.39-dev already has new dynamic-module support for request-aware upstream selection. A dynamic module can parse a request, write <code>selected_backend</code> or <code>selected_endpoint</code> into request state, and have the cluster read it while choosing the upstream host. That removes the need to pass routing decisions through synthetic headers or route re-selection.</p> <p>Use dev when you need to test an unreleased feature, validate upgrade impact early, or give feedback before the next Envoy release is cut. Use tagged versions for normal production runs.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/tetratelabs/func-e/commit/33bfb64ba4176a8d970a21f9a7516b73c9065266"><code>33bfb64</code></a> Removes last of windows remnants (<a href="https://redirect.github.com/tetratelabs/func-e/issues/515">#515</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/3d2f9e8b33c4e279ff523f4f73d4abd6d8b2c5b3"><code>3d2f9e8</code></a> Automates PR to update last known Envoy version (<a href="https://redirect.github.com/tetratelabs/func-e/issues/514">#514</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/d785fc8c942815230d3c9c9058a1c0de74a9bb91"><code>d785fc8</code></a> Reverts to Tools.mk for go run instead of go tool (<a href="https://redirect.github.com/tetratelabs/func-e/issues/513">#513</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/99644b8672c6ed54fef2a5afe20b05472e27750f"><code>99644b8</code></a> Removes nfpm env workaround (<a href="https://redirect.github.com/tetratelabs/func-e/issues/512">#512</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/1791ba3ad4bf9999a994230d8a1e7bcdc49143d7"><code>1791ba3</code></a> Fix install.sh to follow curl-sh norms (<a href="https://redirect.github.com/tetratelabs/func-e/issues/511">#511</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/7f8616455617411cd217fbb78aeb3268814fd1ae"><code>7f86164</code></a> Fix races and -race by default (<a href="https://redirect.github.com/tetratelabs/func-e/issues/510">#510</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/04fe1e25b51cdff3e025548a63626cde0c996415"><code>04fe1e2</code></a> Use yesterday's envoy main build via the "dev" version (<a href="https://redirect.github.com/tetratelabs/func-e/issues/509">#509</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/a0c7a071675c5502a481b72bc9b32fea934c8311"><code>a0c7a07</code></a> Backfills rationale for internal httptest package (<a href="https://redirect.github.com/tetratelabs/func-e/issues/508">#508</a>)</li> <li><a href="https://github.com/tetratelabs/func-e/commit/91e310e948417655a9c2548744b70f3285984555"><code>91e310e</code></a> Installs go so that release e2e can run (<a href="https://redirect.github.com/tetratelabs/func-e/issues/507">#507</a>)</li> <li>See full diff in <a href="https://github.com/tetratelabs/func-e/compare/v1.5.0...v1.6.0">compare view</a></li> </ul> </details> <br /> Updates `google.golang.org/api` from 0.279.0 to 0.280.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/google-api-go-client/releases">google.golang.org/api's releases</a>.</em></p> <blockquote> <h2>v0.280.0</h2> <h2><a href="https://github.com/googleapis/google-api-go-client/compare/v0.279.0...v0.280.0">0.280.0</a> (2026-05-19)</h2> <h3>Features</h3> <ul> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3591">#3591</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/55ba2fab69ee14286ad052f57ed90a726b071e86">55ba2fa</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3593">#3593</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/054d4b6054450d2be21f50fad64145a4e0125424">054d4b6</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3594">#3594</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/03829161b8cd77bf11f4a3a5d07a43f6b1904fbe">0382916</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3595">#3595</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/13e1ad2eeb540d19709df87ce9a0cfdb632f1bf3">13e1ad2</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3596">#3596</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/4c77865748dda2086de226e9401531c934cd909f">4c77865</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3598">#3598</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/ae2f33001826f523ecc6d2f141244e55fbac45c0">ae2f330</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3599">#3599</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/f82d2049187ed2ab7ee27831a1a78887c5969ca4">f82d204</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md">google.golang.org/api's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/googleapis/google-api-go-client/compare/v0.279.0...v0.280.0">0.280.0</a> (2026-05-19)</h2> <h3>Features</h3> <ul> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3591">#3591</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/55ba2fab69ee14286ad052f57ed90a726b071e86">55ba2fa</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3593">#3593</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/054d4b6054450d2be21f50fad64145a4e0125424">054d4b6</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3594">#3594</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/03829161b8cd77bf11f4a3a5d07a43f6b1904fbe">0382916</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3595">#3595</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/13e1ad2eeb540d19709df87ce9a0cfdb632f1bf3">13e1ad2</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3596">#3596</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/4c77865748dda2086de226e9401531c934cd909f">4c77865</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3598">#3598</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/ae2f33001826f523ecc6d2f141244e55fbac45c0">ae2f330</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3599">#3599</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/f82d2049187ed2ab7ee27831a1a78887c5969ca4">f82d204</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/googleapis/google-api-go-client/commit/3887b09ecbbaf25fba1bf52227ad5ca4f89e9968"><code>3887b09</code></a> chore(main): release 0.280.0 (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3592">#3592</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/f82d2049187ed2ab7ee27831a1a78887c5969ca4"><code>f82d204</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3599">#3599</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/13e7314e1377c0dd4e132a681b3130abc5843dbd"><code>13e7314</code></a> chore(all): update all (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3597">#3597</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/ae2f33001826f523ecc6d2f141244e55fbac45c0"><code>ae2f330</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3598">#3598</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/4c77865748dda2086de226e9401531c934cd909f"><code>4c77865</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3596">#3596</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/13e1ad2eeb540d19709df87ce9a0cfdb632f1bf3"><code>13e1ad2</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3595">#3595</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/03829161b8cd77bf11f4a3a5d07a43f6b1904fbe"><code>0382916</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3594">#3594</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/054d4b6054450d2be21f50fad64145a4e0125424"><code>054d4b6</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3593">#3593</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/55ba2fab69ee14286ad052f57ed90a726b071e86"><code>55ba2fa</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3591">#3591</a>)</li> <li>See full diff in <a href="https://github.com/googleapis/google-api-go-client/compare/v0.279.0...v0.280.0">compare view</a></li> </ul> </details> <br /> Updates `google.golang.org/genai` from 1.57.0 to 1.58.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/go-genai/releases">google.golang.org/genai's releases</a>.</em></p> <blockquote> <h2>v1.58.0</h2> <h2><a href="https://github.com/googleapis/go-genai/compare/v1.57.0...v1.58.0">1.58.0</a> (2026-05-21)</h2> <h3>Features</h3> <ul> <li>add <code>enable_prompt_injection_detection</code> for Computer Use feature for the Gemini API. (<a href="https://github.com/googleapis/go-genai/commit/19c2566dcfdbfdbc5821ab8ffb71f6155f084dab">19c2566</a>)</li> <li>add new fields (<a href="https://github.com/googleapis/go-genai/commit/1608e807c1aa9d80dfc484db6cc37f49ee4e69a1">1608e80</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md">google.golang.org/genai's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/googleapis/go-genai/compare/v1.57.0...v1.58.0">1.58.0</a> (2026-05-21)</h2> <h3>Features</h3> <ul> <li>add <code>enable_prompt_injection_detection</code> for Computer Use feature for the Gemini API. (<a href="https://github.com/googleapis/go-genai/commit/19c2566dcfdbfdbc5821ab8ffb71f6155f084dab">19c2566</a>)</li> <li>add new fields (<a href="https://github.com/googleapis/go-genai/commit/1608e807c1aa9d80dfc484db6cc37f49ee4e69a1">1608e80</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/googleapis/go-genai/commit/97ea31f16473973e587f5b18659a5669dffd1f84"><code>97ea31f</code></a> chore(main): release 1.58.0 (<a href="https://redirect.github.com/googleapis/go-genai/issues/793">#793</a>)</li> <li><a href="https://github.com/googleapis/go-genai/commit/19c2566dcfdbfdbc5821ab8ffb71f6155f084dab"><code>19c2566</code></a> feat: add <code>enable_prompt_injection_detection</code> for Computer Use feature for th...</li> <li><a href="https://github.com/googleapis/go-genai/commit/1608e807c1aa9d80dfc484db6cc37f49ee4e69a1"><code>1608e80</code></a> feat: add new fields</li> <li><a href="https://github.com/googleapis/go-genai/commit/843a665755f75055e7c4bde1177af703384f7905"><code>843a665</code></a> chore: update comment in BatchJobOutputInfo to unblock javadoc generation</li> <li><a href="https://github.com/googleapis/go-genai/commit/8b28bf81bd7a3cee47ed0a8b911e0d574f87a7aa"><code>8b28bf8</code></a> chore: Throw fatals() instead of errors() in the replay_api_client when the i...</li> <li>See full diff in <a href="https://github.com/googleapis/go-genai/compare/v1.57.0...v1.58.0">compare view</a></li> </ul> </details> <br /> Updates `google.golang.org/genproto/googleapis/rpc` from 0.0.0-20260427160629-7cedc36a6bc4 to 0.0.0-20260511170946-3700d4141b60 <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/googleapis/go-genproto/commits">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description**
When an MCPRoute/AIGW ROute references a non-existent Gateway in its
spec.parentRefs, the controller still marks the route as "Accepted" with
the message "Gateway Route reconciled successfully". The controller logs
"Gateway not found" but does not propagate this as an error, so the
reconciliation appears successful.
Root Cause:
In internal/controller/mcp_route.go, the syncGateway function was a void
function that silently returned on errors — it logged "Gateway not
found" but never returned an error to the caller. Since syncGateways
(which calls syncGateway for each parentRef) always returned nil, the
syncMCPRoute function completed successfully, and Reconcile marked the
status as ConditionTypeAccepted.
- and same goes for ai gateway route controller
Fix:
Changed syncGateway to return an error. When the referenced Gateway is
not found, it now returns a descriptive error ("gateway
<namespace>/<name> not found"). This error propagates through
syncGateways → syncRoute → Reconcile, which then calls updateRouteStatus
with ConditionTypeNotAccepted and the error message.
During Route deletion (via the finalizer path), the error is still
logged but does not block cleanup — handleFinalizer already handles
onDeletionFn errors non-fatally.
---------
Signed-off-by: Hritik003 <hritik.raj@nutanix.com>
… in Bedrock translator (envoyproxy#2189) **Description** In the Anthropic-to-AWS-Bedrock translator, Claude Code with mid-conversation-system beta sends system prompts as {"role": "system"} in the messages array. The SDK has no system role constant so these hit the default error case. This promotes them to the top-level system param before conversion. Fixes envoyproxy#2206 Signed-off-by: Linus Schlumberger <linus.schlumberger@siemens.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…ror translation (envoyproxy#2161) **Description** Anthropic→OpenAI error translation could fail with an internal 500 when an OpenAI-compatible upstream returned a structured JSON error where `error.code` was numeric (e.g. `400`) instead of string. This change makes the error model tolerant to both representations so upstream 4xx diagnostics can still be translated and surfaced to Anthropic clients. - **Schema decoding hardening (`internal/apischema/openai/openai.go`)** - Added `UnmarshalJSON` for `openai.ErrorType`. - `error.code` now accepts: - JSON string (`"code":"400"`) - JSON number (`"code":400`) - `null` / omitted - Numeric values are normalized to the existing internal `*string` field. - **Translator regression coverage (`internal/translator/anthropic_openai_test.go`)** - Extended `TestAnthropicToOpenAITranslator_ResponseError` with a JSON error fixture containing numeric `code`. - Confirms response still maps to Anthropic error envelope with expected `type` and `message`. ```json { "type": "error", "error": { "type": "invalid_request_error", "message": "Bad request", "param": null, "code": 400 } } ``` **Related Issues/PRs (if applicable)** Fixes envoyproxy#2151 **Special notes for reviewers (if applicable)** N/A --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description** Fix the vars for the 0.7 and main releases. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A Signed-off-by: Ignasi Barrera <nacx@apache.org>
…2199) **Description** Anthropic recently exposed the reasoning tokens via `output_tokens_details`: https://platform.claude.com/docs/en/api/python/messages/create. Thus we should also added this usage information for our users. --------- Signed-off-by: yxia216 <yxia216@bloomberg.net> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…voyproxy#2220) Bumps the go group with 3 updates in the / directory: [go.opentelemetry.io/contrib/exporters/autoexport](https://github.com/open-telemetry/opentelemetry-go-contrib), [go.opentelemetry.io/contrib/propagators/autoprop](https://github.com/open-telemetry/opentelemetry-go-contrib) and [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `go.opentelemetry.io/contrib/exporters/autoexport` from 0.68.0 to 0.69.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/releases">go.opentelemetry.io/contrib/exporters/autoexport's releases</a>.</em></p> <blockquote> <h2>v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0</h2> <h3>Added</h3> <ul> <li>Add <code>error.type</code> attribute to <code>http.client.request.duration</code> for transport failures in <code>otelhttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li> <li>Add examples for prometheus compatibility document. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li> <li>Add support for <code>cardinality_limits</code> in <code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li> <li>Add <code>Resource</code> method to <code>SDK</code> in <code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the resolved SDK resource from declarative configuration. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li> <li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a new resource detector for Hetzner Cloud servers, ported from <code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>. Detects <code>cloud.provider</code>, <code>cloud.platform</code>, <code>cloud.region</code>, <code>cloud.availability_zone</code>, <code>host.id</code>, and <code>host.name</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Set error field as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li> <li>Set the "error" field (e.g. created via <code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li> <li>Set fields implementing <code>error</code> interface from <code>slog</code> records as <code>record.SetErr</code> instead of plain attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li> <li>Set emitted errors in <code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record errors (<code>Record.SetErr</code>) instead of <code>exception.message</code> attributes. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Fix header attributes lost when using sub-spans in <code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li> <li>Validate <code>encoding</code> configuration for OTLP HTTP exporters in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li> <li>Remove the custom body wrapper from the request's body after the request is processed to allow body type comparisons with the original type in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> and <code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li> <li>Unknown or empty HTTP methods now report "_OTHER" instead of "GET" across all HTTP instrumentations to align with OpenTelemetry semantic conventions. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li> <li>The default span name formatter in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> now conforms to the OpenTelemetry HTTP semantic conventions for server span names. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>) <ul> <li>The default span name is now <code>{method} {route}</code> (e.g. <code>GET /foo/{id}</code>) when a route pattern is available, or <code>{method}</code> (e.g. <code>GET</code>) otherwise.</li> </ul> </li> </ul> <h3>Removed</h3> <ul> <li>Remove the deprecated <code>WithSpanOptions</code> option in <code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li> </ul> <h2>What's Changed</h2> <ul> <li>otelconf: validate encoding configuration for OTLP HTTP exporters by <a href="https://github.com/sonalgaud12"><code>@sonalgaud12</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8772">open-telemetry/opentelemetry-go-contrib#8772</a></li> <li>fix(deps): update module github.com/aws/aws-sdk-go-v2/service/s3 to v1.99.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8780">open-telemetry/opentelemetry-go-contrib#8780</a></li> <li>chore(deps): update prom/prometheus docker tag to v3.11.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8779">open-telemetry/opentelemetry-go-contrib#8779</a></li> <li>otellogrus: Set error field as <code>record.SetErr</code> by <a href="https://github.com/sonalgaud12"><code>@sonalgaud12</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8778">open-telemetry/opentelemetry-go-contrib#8778</a></li> <li>chore(deps): update module golang.org/x/sys to v0.43.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8783">open-telemetry/opentelemetry-go-contrib#8783</a></li> <li>chore(deps): update golang.org/x/telemetry digest to 93c7c8a by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8786">open-telemetry/opentelemetry-go-contrib#8786</a></li> <li>chore(deps): update module github.com/mattn/go-isatty to v0.0.21 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8787">open-telemetry/opentelemetry-go-contrib#8787</a></li> <li>chore(deps): update module github.com/mattn/go-runewidth to v0.0.23 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8788">open-telemetry/opentelemetry-go-contrib#8788</a></li> <li>chore(deps): update golang.org/x by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8791">open-telemetry/opentelemetry-go-contrib#8791</a></li> <li>chore(deps): update actions/github-script action to v9 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8795">open-telemetry/opentelemetry-go-contrib#8795</a></li> <li>fix(deps): update golang.org/x by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8794">open-telemetry/opentelemetry-go-contrib#8794</a></li> <li>otelzap: set error field as record.SetErr by <a href="https://github.com/iblancasa"><code>@iblancasa</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8719">open-telemetry/opentelemetry-go-contrib#8719</a></li> <li>fix(deps): update golang.org/x to 746e56f by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8796">open-telemetry/opentelemetry-go-contrib#8796</a></li> <li>chore(deps): update module golang.org/x/arch to v0.26.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8798">open-telemetry/opentelemetry-go-contrib#8798</a></li> <li>Check if otelgrpc metrics are enabled by <a href="https://github.com/dashpole"><code>@dashpole</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8792">open-telemetry/opentelemetry-go-contrib#8792</a></li> <li>chore(deps): update actions/upload-artifact action to v7.0.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8800">open-telemetry/opentelemetry-go-contrib#8800</a></li> <li>Check instrument enabled in deprecatedruntime by <a href="https://github.com/dashpole"><code>@dashpole</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8793">open-telemetry/opentelemetry-go-contrib#8793</a></li> <li>chore(deps): update module github.com/ashanbrown/forbidigo/v2 to v2.3.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8804">open-telemetry/opentelemetry-go-contrib#8804</a></li> <li>chore(deps): update module github.com/ashanbrown/makezero/v2 to v2.2.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8802">open-telemetry/opentelemetry-go-contrib#8802</a></li> <li>chore(deps): update module github.com/manuelarte/funcorder to v0.6.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8803">open-telemetry/opentelemetry-go-contrib#8803</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md">go.opentelemetry.io/contrib/exporters/autoexport's changelog</a>.</em></p> <blockquote> <h2>[1.44.0/2.5.1/0.69.0/0.37.1/0.24.0/0.19.0/0.16.1/0.16.0] - 2026-05-28</h2> <h3>Added</h3> <ul> <li>Add <code>error.type</code> attribute to <code>http.client.request.duration</code> for transport failures in <code>otelhttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li> <li>Add examples for prometheus compatibility document. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li> <li>Add support for <code>cardinality_limits</code> in <code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li> <li>Add <code>Resource</code> method to <code>SDK</code> in <code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the resolved SDK resource from declarative configuration. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li> <li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a new resource detector for Hetzner Cloud servers, ported from <code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>. Detects <code>cloud.provider</code>, <code>cloud.platform</code>, <code>cloud.region</code>, <code>cloud.availability_zone</code>, <code>host.id</code>, and <code>host.name</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Set error field as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li> <li>Set the "error" field (e.g. created via <code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li> <li>Set fields implementing <code>error</code> interface from <code>slog</code> records as <code>record.SetErr</code> instead of plain attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li> <li>Set emitted errors in <code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record errors (<code>Record.SetErr</code>) instead of <code>exception.message</code> attributes. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Fix header attributes lost when using sub-spans in <code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li> <li>Validate <code>encoding</code> configuration for OTLP HTTP exporters in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li> <li>Remove the custom body wrapper from the request's body after the request is processed to allow body type comparisons with the original type in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> and <code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li> <li>Unknown or empty HTTP methods now report "_OTHER" instead of "GET" across all HTTP instrumentations to align with OpenTelemetry semantic conventions. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li> <li>The default span name formatter in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> now conforms to the OpenTelemetry HTTP semantic conventions for server span names. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>) <ul> <li>The default span name is now <code>{method} {route}</code> (e.g. <code>GET /foo/{id}</code>) when a route pattern is available, or <code>{method}</code> (e.g. <code>GET</code>) otherwise.</li> </ul> </li> </ul> <h3>Removed</h3> <ul> <li>Remove the deprecated <code>WithSpanOptions</code> option in <code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/03b2bcdb54b3dde73c9ff91ae216aec262f6c8f5"><code>03b2bcd</code></a> Release v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9033">#9033</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/80c46d4037d5991ce324216a52cf7e8d7f2d81fa"><code>80c46d4</code></a> chore(deps): update module github.com/alecthomas/chroma/v2 to v2.26.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9034">#9034</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/51f292197d33b84a21b3c70ae21cb185a2570d5e"><code>51f2921</code></a> fix(deps): update module github.com/hetznercloud/hcloud-go/v2 to v2.41.2 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9026">#9026</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/db82162f1b642bb6dca7fa5be48045315bb466d6"><code>db82162</code></a> fix(deps): update aws-sdk-go-v2 monorepo (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9031">#9031</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/5a3e533d8cd4045128e61a966f6dad58964a78ea"><code>5a3e533</code></a> fix(deps): update module github.com/aws/smithy-go to v1.26.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9032">#9032</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c67843c753a924faef17bc4aa63c138aa9472477"><code>c67843c</code></a> otelhttp: Remove custom wrapper after handling request (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c0a41352283151ab6655e88120e4ff4f0a917a2e"><code>c0a4135</code></a> docs(otelhttptrace): add performance guidance for WithoutSubSpans (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8785">#8785</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/a51a86790e1f4df231a70bb5fecc72b95d3c1bf0"><code>a51a867</code></a> otelconf: implement cardinality_limits support in PeriodicMetricReader (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/dead6e50fc0b5b3dc4aea288df207953dae5afe7"><code>dead6e5</code></a> chore(deps): update module go.yaml.in/yaml/v2 to v2.4.4 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8994">#8994</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/979ce1857524394d0884fd7c491722c5bcb43d50"><code>979ce18</code></a> chore(deps): update module github.com/jgautheron/goconst to v1.10.2 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9030">#9030</a>)</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.68.0...zpages/v0.69.0">compare view</a></li> </ul> </details> <br /> Updates `go.opentelemetry.io/contrib/propagators/autoprop` from 0.68.0 to 0.69.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/releases">go.opentelemetry.io/contrib/propagators/autoprop's releases</a>.</em></p> <blockquote> <h2>v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0</h2> <h3>Added</h3> <ul> <li>Add <code>error.type</code> attribute to <code>http.client.request.duration</code> for transport failures in <code>otelhttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li> <li>Add examples for prometheus compatibility document. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li> <li>Add support for <code>cardinality_limits</code> in <code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li> <li>Add <code>Resource</code> method to <code>SDK</code> in <code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the resolved SDK resource from declarative configuration. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li> <li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a new resource detector for Hetzner Cloud servers, ported from <code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>. Detects <code>cloud.provider</code>, <code>cloud.platform</code>, <code>cloud.region</code>, <code>cloud.availability_zone</code>, <code>host.id</code>, and <code>host.name</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Set error field as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li> <li>Set the "error" field (e.g. created via <code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li> <li>Set fields implementing <code>error</code> interface from <code>slog</code> records as <code>record.SetErr</code> instead of plain attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li> <li>Set emitted errors in <code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record errors (<code>Record.SetErr</code>) instead of <code>exception.message</code> attributes. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Fix header attributes lost when using sub-spans in <code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li> <li>Validate <code>encoding</code> configuration for OTLP HTTP exporters in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li> <li>Remove the custom body wrapper from the request's body after the request is processed to allow body type comparisons with the original type in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> and <code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li> <li>Unknown or empty HTTP methods now report "_OTHER" instead of "GET" across all HTTP instrumentations to align with OpenTelemetry semantic conventions. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li> <li>The default span name formatter in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> now conforms to the OpenTelemetry HTTP semantic conventions for server span names. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>) <ul> <li>The default span name is now <code>{method} {route}</code> (e.g. <code>GET /foo/{id}</code>) when a route pattern is available, or <code>{method}</code> (e.g. <code>GET</code>) otherwise.</li> </ul> </li> </ul> <h3>Removed</h3> <ul> <li>Remove the deprecated <code>WithSpanOptions</code> option in <code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li> </ul> <h2>What's Changed</h2> <ul> <li>otelconf: validate encoding configuration for OTLP HTTP exporters by <a href="https://github.com/sonalgaud12"><code>@sonalgaud12</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8772">open-telemetry/opentelemetry-go-contrib#8772</a></li> <li>fix(deps): update module github.com/aws/aws-sdk-go-v2/service/s3 to v1.99.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8780">open-telemetry/opentelemetry-go-contrib#8780</a></li> <li>chore(deps): update prom/prometheus docker tag to v3.11.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8779">open-telemetry/opentelemetry-go-contrib#8779</a></li> <li>otellogrus: Set error field as <code>record.SetErr</code> by <a href="https://github.com/sonalgaud12"><code>@sonalgaud12</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8778">open-telemetry/opentelemetry-go-contrib#8778</a></li> <li>chore(deps): update module golang.org/x/sys to v0.43.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8783">open-telemetry/opentelemetry-go-contrib#8783</a></li> <li>chore(deps): update golang.org/x/telemetry digest to 93c7c8a by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8786">open-telemetry/opentelemetry-go-contrib#8786</a></li> <li>chore(deps): update module github.com/mattn/go-isatty to v0.0.21 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8787">open-telemetry/opentelemetry-go-contrib#8787</a></li> <li>chore(deps): update module github.com/mattn/go-runewidth to v0.0.23 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8788">open-telemetry/opentelemetry-go-contrib#8788</a></li> <li>chore(deps): update golang.org/x by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8791">open-telemetry/opentelemetry-go-contrib#8791</a></li> <li>chore(deps): update actions/github-script action to v9 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8795">open-telemetry/opentelemetry-go-contrib#8795</a></li> <li>fix(deps): update golang.org/x by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8794">open-telemetry/opentelemetry-go-contrib#8794</a></li> <li>otelzap: set error field as record.SetErr by <a href="https://github.com/iblancasa"><code>@iblancasa</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8719">open-telemetry/opentelemetry-go-contrib#8719</a></li> <li>fix(deps): update golang.org/x to 746e56f by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8796">open-telemetry/opentelemetry-go-contrib#8796</a></li> <li>chore(deps): update module golang.org/x/arch to v0.26.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8798">open-telemetry/opentelemetry-go-contrib#8798</a></li> <li>Check if otelgrpc metrics are enabled by <a href="https://github.com/dashpole"><code>@dashpole</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8792">open-telemetry/opentelemetry-go-contrib#8792</a></li> <li>chore(deps): update actions/upload-artifact action to v7.0.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8800">open-telemetry/opentelemetry-go-contrib#8800</a></li> <li>Check instrument enabled in deprecatedruntime by <a href="https://github.com/dashpole"><code>@dashpole</code></a> in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8793">open-telemetry/opentelemetry-go-contrib#8793</a></li> <li>chore(deps): update module github.com/ashanbrown/forbidigo/v2 to v2.3.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8804">open-telemetry/opentelemetry-go-contrib#8804</a></li> <li>chore(deps): update module github.com/ashanbrown/makezero/v2 to v2.2.1 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8802">open-telemetry/opentelemetry-go-contrib#8802</a></li> <li>chore(deps): update module github.com/manuelarte/funcorder to v0.6.0 by <a href="https://github.com/renovate"><code>@renovate</code></a>[bot] in <a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8803">open-telemetry/opentelemetry-go-contrib#8803</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md">go.opentelemetry.io/contrib/propagators/autoprop's changelog</a>.</em></p> <blockquote> <h2>[1.44.0/2.5.1/0.69.0/0.37.1/0.24.0/0.19.0/0.16.1/0.16.0] - 2026-05-28</h2> <h3>Added</h3> <ul> <li>Add <code>error.type</code> attribute to <code>http.client.request.duration</code> for transport failures in <code>otelhttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li> <li>Add examples for prometheus compatibility document. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li> <li>Add support for <code>cardinality_limits</code> in <code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li> <li>Add <code>Resource</code> method to <code>SDK</code> in <code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the resolved SDK resource from declarative configuration. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li> <li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a new resource detector for Hetzner Cloud servers, ported from <code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>. Detects <code>cloud.provider</code>, <code>cloud.platform</code>, <code>cloud.region</code>, <code>cloud.availability_zone</code>, <code>host.id</code>, and <code>host.name</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Set error field as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li> <li>Set the "error" field (e.g. created via <code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li> <li>Set fields implementing <code>error</code> interface from <code>slog</code> records as <code>record.SetErr</code> instead of plain attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li> <li>Set emitted errors in <code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record errors (<code>Record.SetErr</code>) instead of <code>exception.message</code> attributes. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Fix header attributes lost when using sub-spans in <code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li> <li>Validate <code>encoding</code> configuration for OTLP HTTP exporters in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li> <li>Remove the custom body wrapper from the request's body after the request is processed to allow body type comparisons with the original type in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> and <code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li> <li>Unknown or empty HTTP methods now report "_OTHER" instead of "GET" across all HTTP instrumentations to align with OpenTelemetry semantic conventions. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li> <li>The default span name formatter in <code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code> now conforms to the OpenTelemetry HTTP semantic conventions for server span names. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>) <ul> <li>The default span name is now <code>{method} {route}</code> (e.g. <code>GET /foo/{id}</code>) when a route pattern is available, or <code>{method}</code> (e.g. <code>GET</code>) otherwise.</li> </ul> </li> </ul> <h3>Removed</h3> <ul> <li>Remove the deprecated <code>WithSpanOptions</code> option in <code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/03b2bcdb54b3dde73c9ff91ae216aec262f6c8f5"><code>03b2bcd</code></a> Release v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9033">#9033</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/80c46d4037d5991ce324216a52cf7e8d7f2d81fa"><code>80c46d4</code></a> chore(deps): update module github.com/alecthomas/chroma/v2 to v2.26.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9034">#9034</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/51f292197d33b84a21b3c70ae21cb185a2570d5e"><code>51f2921</code></a> fix(deps): update module github.com/hetznercloud/hcloud-go/v2 to v2.41.2 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9026">#9026</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/db82162f1b642bb6dca7fa5be48045315bb466d6"><code>db82162</code></a> fix(deps): update aws-sdk-go-v2 monorepo (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9031">#9031</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/5a3e533d8cd4045128e61a966f6dad58964a78ea"><code>5a3e533</code></a> fix(deps): update module github.com/aws/smithy-go to v1.26.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9032">#9032</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c67843c753a924faef17bc4aa63c138aa9472477"><code>c67843c</code></a> otelhttp: Remove custom wrapper after handling request (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c0a41352283151ab6655e88120e4ff4f0a917a2e"><code>c0a4135</code></a> docs(otelhttptrace): add performance guidance for WithoutSubSpans (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8785">#8785</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/a51a86790e1f4df231a70bb5fecc72b95d3c1bf0"><code>a51a867</code></a> otelconf: implement cardinality_limits support in PeriodicMetricReader (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/dead6e50fc0b5b3dc4aea288df207953dae5afe7"><code>dead6e5</code></a> chore(deps): update module go.yaml.in/yaml/v2 to v2.4.4 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8994">#8994</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/979ce1857524394d0884fd7c491722c5bcb43d50"><code>979ce18</code></a> chore(deps): update module github.com/jgautheron/goconst to v1.10.2 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9030">#9030</a>)</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.68.0...zpages/v0.69.0">compare view</a></li> </ul> </details> <br /> Updates `go.opentelemetry.io/otel` from 1.43.0 to 1.44.0 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md">go.opentelemetry.io/otel's changelog</a>.</em></p> <blockquote> <h2>[1.44.0/0.66.0/0.20.0/0.0.17] 2026-05-27</h2> <h3>Added</h3> <ul> <li>Add <code>ByteSlice</code> and <code>ByteSliceValue</code> functions for new <code>BYTESLICE</code> attribute type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7948">#7948</a>)</li> <li>Apply attribute value limit to the <code>KindBytes</code> attribute type in <code>go.opentelemetry.io/otel/sdk/log</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li> <li>Apply attribute value limit to the <code>BYTESLICE</code> attribute type in <code>go.opentelemetry.io/otel/sdk/trace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/trace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Add <code>String</code> method for <code>Value</code> type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8142">#8142</a>)</li> <li>Add <code>Slice</code> and <code>SliceValue</code> functions for new <code>SLICE</code> attribute type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8166">#8166</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Apply <code>AttributeValueLengthLimit</code> to <code>attribute.SLICE</code> type attribute values in <code>go.opentelemetry.io/otel/sdk/trace</code>, recursively truncating contained string values. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8217">#8217</a>)</li> <li>Add <code>Error</code> field on <code>Record</code> type in <code>go.opentelemetry.io/otel/log/logtest</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8148">#8148</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>Settable</code> to <code>go.opentelemetry.io/otel/metric/x</code> to allow reusing attribute options. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8178">#8178</a>)</li> <li>Add experimental support for splitting metric data across multiple batches in <code>go.opentelemetry.io/otel/sdk/metric</code>. Set <code>OTEL_GO_X_METRIC_EXPORT_BATCH_SIZE=<max_size></code> to enable for all periodic readers. See <code>go.opentelemetry.io/otel/sdk/metric/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8071">#8071</a>)</li> <li>Add experimental self-observability metrics in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment variable. See <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8192">#8192</a>)</li> <li>Add experimental self-observability metrics in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment variable. See <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8194">#8194</a>)</li> <li>Add experimental self-observability metrics in <code>go.opentelemetry.io/otel/exporters/stdout/stdoutlog</code>. Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment variable. See <code>go.opentelemetry.io/otel/stdout/stdoutlog/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8263">#8263</a>)</li> <li>Add <code>WithDefaultAttributes</code> to <code>go.opentelemetry.io/otel/metric/x</code> to support setting default attributes on instruments. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8135">#8135</a>)</li> <li>Add <code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package. The package contains semantic conventions from the <code>v1.41.0</code> version of the OpenTelemetry Semantic Conventions. See the <a href="https://github.com/open-telemetry/opentelemetry-go/blob/main/semconv/v1.41.0/MIGRATION.md">migration documentation</a> for information on how to upgrade from <code>go.opentelemetry.io/otel/semconv/v1.40.0</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8324">#8324</a>)</li> <li>Add Observable variants of instruments to <code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8350">#8350</a>)</li> <li>Generate explicit histogram bucket boundaries from weaver configuration for HTTP and RPC duration instruments in <code>go.opentelemetry.io/otel/semconv/v1.41.0</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8002">#8002</a>)</li> </ul> <h3>Changed</h3> <ul> <li>⚠️ <strong>Breaking Change:</strong> <code>go.opentelemetry.io/otel/sdk/metric</code> now applies a default cardinality limit of 2000 to comply with the Metrics SDK specification recommendation. New attribute sets are dropped when the cardinality limit is reached. The measurement of these sets are aggregated into a special attribute set containing <code>attribute.Bool("otel.metric.overflow", true)</code>.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/b62d92831b2dd142f5a0cc89c828270274196877"><code>b62d928</code></a> Release 1.44.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8376">#8376</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/94132a0a729e94c5aa6e9e1ce7640c0f802dcfea"><code>94132a0</code></a> chore(deps): update golang.org/x/telemetry digest to 5997936 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8379">#8379</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/6fdcf82adfebc3becfb5d357957546d6d7258469"><code>6fdcf82</code></a> feat: add self-observability metrics to otlpmetricgrpc metric exporters (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8192">#8192</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/761bbfc2f4ae002f4a54f8c57c12b8a58135a741"><code>761bbfc</code></a> fix(deps): update golang.org/x (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8377">#8377</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/3a91dc62d3852313bab40ff151bb3e11fae1745e"><code>3a91dc6</code></a> fix(deps): update googleapis to 3dc84a4 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8375">#8375</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/f593185679130f56e14bed3c337fa7f8f60756b1"><code>f593185</code></a> exporters/otlp: default max request size to 64 MiB (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8365">#8365</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/f02feacf8652b69c051851cfa2945d2ed5f0d568"><code>f02feac</code></a> Merge commit from fork</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/36c2f1bfd1a6a789dc575f8886399093d7600586"><code>36c2f1b</code></a> semconvkit: add invariant test for histogram-exclusion rule (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8370">#8370</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/d0b6cbdff5346557923fd05bd3f5f34df002aeee"><code>d0b6cbd</code></a> sdk/metric: document unit-sensitivity of DefaultAggregationSelector (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8224">#8224</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/9a68034bd45c6f24c481d9f9c87ebbee0a61482f"><code>9a68034</code></a> add self observability for stdout exporter (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8263">#8263</a>)</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-go/compare/v1.43.0...v1.44.0">compare view</a></li> </ul> </details> <br /> Updates `go.opentelemetry.io/otel/exporters/prometheus` from 0.65.0 to 0.66.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go/releases">go.opentelemetry.io/otel/exporters/prometheus's releases</a>.</em></p> <blockquote> <h2>v1.44.0/v0.66.0/v0.20.0/v0.0.17</h2> <h3>Added</h3> <ul> <li>Add <code>ByteSlice</code> and <code>ByteSliceValue</code> functions for new <code>BYTESLICE</code> attribute type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7948">#7948</a>)</li> <li>Apply attribute value limit to the <code>KindBytes</code> attribute type in <code>go.opentelemetry.io/otel/sdk/log</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li> <li>Apply attribute value limit to the <code>BYTESLICE</code> attribute type in <code>go.opentelemetry.io/otel/sdk/trace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/trace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Add <code>String</code> method for <code>Value</code> type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8142">#8142</a>)</li> <li>Add <code>Slice</code> and <code>SliceValue</code> functions for new <code>SLICE</code> attribute type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8166">#8166</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Apply <code>AttributeValueLengthLimit</code> to <code>attribute.SLICE</code> type attribute values in <code>go.opentelemetry.io/otel/sdk/trace</code>, recursively truncating contained string values. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8217">#8217</a>)</li> <li>Add <code>Error</code> field on <code>Record</code> type in <code>go.opentelemetry.io/otel/log/logtest</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8148">#8148</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>Settable</code> to <code>go.opentelemetry.io/otel/metric/x</code> to allow reusing attribute options. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8178">#8178</a>)</li> <li>Add experimental support for splitting metric data across multiple batches in <code>go.opentelemetry.io/otel/sdk/metric</code>. Set <code>OTEL_GO_X_METRIC_EXPORT_BATCH_SIZE=<max_size></code> to enable for all periodic readers. See <code>go.opentelemetry.io/otel/sdk/metric/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8071">#8071</a>)</li> <li>Add experimental self-observability metrics in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment variable. See <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8192">#8192</a>)</li> <li>Add experimental self-observability metrics in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment variable. See <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8194">#8194</a>)</li> <li>Add experimental self-observability metrics in <code>go.opentelemetry.io/otel/exporters/stdout/stdoutlog</code>. Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment variable. See <code>go.opentelemetry.io/otel/stdout/stdoutlog/internal/x</code> for feature documentation. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8263">#8263</a>)</li> <li>Add <code>WithDefaultAttributes</code> to <code>go.opentelemetry.io/otel/metric/x</code> to support setting default attributes on instruments. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8135">#8135</a>)</li> <li>Add <code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package. The package contains semantic conventions from the <code>v1.41.0</code> version of the OpenTelemetry Semantic Conventions. See the <a href="https://github.com/open-telemetry/opentelemetry-go/blob/HEAD/semconv/v1.41.0/MIGRATION.md">migration documentation</a> for information on how to upgrade from <code>go.opentelemetry.io/otel/semconv/v1.40.0</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8324">#8324</a>)</li> <li>Add Observable variants of instruments to <code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8350">#8350</a>)</li> <li>Generate explicit histogram bucket boundaries from weaver configuration for HTTP and RPC duration instruments in <code>go.opentelemetry.io/otel/semconv/v1.41.0</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8002">#8002</a>)</li> </ul> <h3>Changed</h3> <ul> <li>⚠️ <strong>Breaking Change:</strong> <code>go.opentelemetry.io/otel/sdk/metric</code> now applies a default cardinality limit of 2000 to comply with the Metrics SDK specification recommendation. New attribute sets are dropped when the cardinality limit is reached. The measurement of these sets are aggregated into a special attribute set containing <code>attribute.Bool("otel.metric.overflow", true)</code>. This can break users who relied on the previous unlimited default.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md">go.opentelemetry.io/otel/exporters/prometheus's changelog</a>.</em></p> <blockquote> <h2>[1.44.0/0.66.0/0.20.0/0.0.17] 2026-05-27</h2> <h3>Added</h3> <ul> <li>Add <code>ByteSlice</code> and <code>ByteSliceValue</code> functions for new <code>BYTESLICE</code> attribute type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7948">#7948</a>)</li> <li>Apply attribute value limit to the <code>KindBytes</code> attribute type in <code>go.opentelemetry.io/otel/sdk/log</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li> <li>Apply attribute value limit to the <code>BYTESLICE</code> attribute type in <code>go.opentelemetry.io/otel/sdk/trace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/trace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Support <code>BYTESLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li> <li>Add <code>String</code> method for <code>Value</code> type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8142">#8142</a>)</li> <li>Add <code>Slice</code> and <code>SliceValue</code> functions for new <code>SLICE</code> attribute type in <code>go.opentelemetry.io/otel/attribute</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8166">#8166</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Support <code>SLICE</code> attributes in <code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li> <li>Apply <code>AttributeValueLengthLimit</code> to <code>attribute.SLICE</code> type attribute values in <code>go.opentelemetry.io/otel/sdk/trace</code>, recursively truncating contained string values. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8217">#8217</a>)</li> <li>Add <code>Error</code> field on <code>Record</code> type in <code>go.opentelemetry.io/otel/log/logtest</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8148">#8148</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>WithMaxRequestSize</code> option in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li> <li>Add <code>Settable</code> to <code>go.opentelemetry.io/otel/metric/x</code> to allow reusing attribute options. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8178">#8178</a>)</li> <li>Add experimental support for splitting metric data across multiple batches in <code>go.opentelemetry.io/otel/sdk/metric</code>. Set <code>OTEL_GO_X_METRIC_EXPORT_BATCH_SIZE=<max_size></code> to enable for all periodic readers. See <code>go.opentelemetry.io/otel/s…
… github-actions group (envoyproxy#2221) Bumps the github-actions group with 1 update: [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action). Updates `docker/setup-qemu-action` from 4.0.0 to 4.1.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/setup-qemu-action/releases">docker/setup-qemu-action's releases</a>.</em></p> <blockquote> <h2>v4.1.0</h2> <ul> <li>Add <code>reset</code> input to uninstall current emulators by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/21">docker/setup-qemu-action#21</a></li> <li>Bump <code>@docker/actions-toolkit</code> from 0.77.0 to 0.91.0 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/250">docker/setup-qemu-action#250</a> <a href="https://redirect.github.com/docker/setup-qemu-action/pull/247">docker/setup-qemu-action#247</a></li> <li>Bump brace-expansion from 1.1.12 to 1.1.15 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/265">docker/setup-qemu-action#265</a></li> <li>Bump fast-xml-builder from 1.0.0 to 1.2.0 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/286">docker/setup-qemu-action#286</a></li> <li>Bump fast-xml-parser from 5.4.2 to 5.8.0 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/255">docker/setup-qemu-action#255</a></li> <li>Bump flatted from 3.3.3 to 3.4.2 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/257">docker/setup-qemu-action#257</a></li> <li>Bump glob from 10.3.15 to 10.5.0 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/254">docker/setup-qemu-action#254</a></li> <li>Bump handlebars from 4.7.8 to 4.7.9 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/262">docker/setup-qemu-action#262</a></li> <li>Bump lodash from 4.17.23 to 4.18.1 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/273">docker/setup-qemu-action#273</a></li> <li>Bump postcss from 8.5.6 to 8.5.10 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/285">docker/setup-qemu-action#285</a></li> <li>Bump tar from 6.2.1 to 7.5.15 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/287">docker/setup-qemu-action#287</a></li> <li>Bump tmp from 0.2.5 to 0.2.6 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/291">docker/setup-qemu-action#291</a></li> <li>Bump undici from 6.23.0 to 6.26.0 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/251">docker/setup-qemu-action#251</a></li> <li>Bump vite from 7.3.1 to 7.3.2 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/271">docker/setup-qemu-action#271</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/setup-qemu-action/compare/v4.0.0...v4.1.0">https://github.com/docker/setup-qemu-action/compare/v4.0.0...v4.1.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/docker/setup-qemu-action/commit/06116385d9baf250c9f4dcb4858b16962ea869c3"><code>0611638</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/21">#21</a> from crazy-max/uninst</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/ce59c818a5ff16552ddf7407ee7cb00bea682925"><code>ce59c81</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/2ddad4401e17fa807e8a3c4bd289ccdd993f0868"><code>2ddad44</code></a> uninstall current emulators</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/8c37cd6f3456e1f3f3026250eac496709e9e7e10"><code>8c37cd6</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/250">#250</a> from docker/dependabot/npm_and_yarn/docker/actions-to...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/d1a0ff34af591b8e290e46f3fa114ef5bb81cd1c"><code>d1a0ff3</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/0a8f3dc12541cc2c3b19c182a1a2c90a2c8b8d93"><code>0a8f3dc</code></a> build(deps): bump <code>@docker/actions-toolkit</code> from 0.79.0 to 0.91.0</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/9430f61a7691bd1bfdc4d6ba70e558659d36fa7a"><code>9430f61</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/291">#291</a> from docker/dependabot/npm_and_yarn/tmp-0.2.6</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/978bd7796cb6698377e7af6726b726e5ced642d0"><code>978bd77</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/3479febc62cc0fbcb98c7c7fc0dac778c0d79d6a"><code>3479feb</code></a> build(deps): bump tmp from 0.2.5 to 0.2.6</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/b113c264143c28c2974bed61af25be32d32f4782"><code>b113c26</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/255">#255</a> from docker/dependabot/npm_and_yarn/fast-xml-parser-5...</li> <li>Additional commits viewable in <a href="https://github.com/docker/setup-qemu-action/compare/ce360397dd3f832beb865e1373c09c0e9f86d70a...06116385d9baf250c9f4dcb4858b16962ea869c3">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
**Description** Adds stacklok to adopters page --------- Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…roxy#2225) **Description** The request body we send to GCP Vertex AI (the Gemini generateContent API) had a few field names in the wrong style. Vertex expects camelCase names like `generationConfig` and `systemInstruction`, but three of them were written in snake_case (`generation_config`, `system_instruction`, `tool_config`). The `safetySettings` field was already camelCase, so the struct was inconsistent with itself. This updates those three names to camelCase so they all match the format Vertex documents and the format the `google.golang.org/genai` library uses. Vertex does accept the snake_case versions as well, so this isn't fixing broken behaviour, but it removes the inconsistency and means we're no longer relying on that leniency. I also updated the tests that were asserting the old snake_case output. While I was in there, I replaced some hardcoded content-length values in the unit test with a check that the content-length header matches the actual body length. Those fixed numbers would have needed recalculating every time the body changed by even a byte, and the new check stays correct on its own. Testing: the existing unit tests and the data plane tests pass, including the GCP Vertex AI cases that exercise the request body end to end. Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…m chart (envoyproxy#2226) **Description** The controller and inference-pool `ClusterRole`/`ClusterRoleBinding` names are built with `printf "%s:%s" <base> .Release.Namespace` to keep them unique per-release (introduced in envoyproxy#1511). When `.Release.Namespace` is empty, this renders `name: <base>:` — an unquoted trailing colon that strict YAML parsers reject with `mapping values are not allowed in this context`. The whole render fails and zero resources are produced. This doesn't trigger via `helm install` or `helm template` (the CLI always defaults the namespace), only where a renderer leaves it unset — e.g. the Helm SDK's `engine.Render` without `ReleaseOptions`, or Replicated's image-extraction render. The fix adds two independent layers of defense across the three affected helpers (`_helpers.tpl`) and their six call sites (`serviceaccount.yaml`, `envoy_gateway_cluster_role_for_inference_pool.yaml`): - Wrap the namespace in `default "default"` so the `printf` argument is never empty. No behavior change for real installs, where the namespace is always populated. - Quote the rendered `name` fields so a trailing colon is always unambiguous. Either layer fixes the failure on its own; both are included for robustness. **Special notes for reviewers (if applicable)** Verified with `helm lint` and `helm template` (default and explicit namespaces) — names render correctly as `<base>:<namespace>` with no change to existing behavior. Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…oyproxy#2191) **Description** In the OpenAI-to-AWS-Bedrock message converter, Bedrock Converse rejects assistant messages with empty content arrays. Some clients send empty assistant messages. This skips them when they have no content blocks. Tool-call-only messages are preserved. Fixes envoyproxy#2208 Signed-off-by: Linus Schlumberger <linus.schlumberger@siemens.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…oyproxy#2170) **Description** **Scope:** this PR fixes the narrow case where the upstream cluster ext_proc filter issued `CONTINUE_AND_REPLACE` even though *nothing in the request pipeline needed to mutate the body* — no translation, no model override, no retry, no backend `HTTPBodyMutation`. In that path, the upstream filter replayed `u.parent.originalRequestBodyRaw` (snapshotted at the router phase), which clobbered any body mutation applied by an earlier ext_proc filter in the listener chain. After this PR, that path emits `CONTINUE` and leaves the body alone. The broader question of "preserve an intermediate filter's body mutation across translation / retries / `HTTPBodyMutation`" is **not** addressed by this PR. When `wantBodyReplace == true`, the replacement body is still derived from the router-phase snapshot, so any intermediate filter's mutation is lost on those branches. That's an architectural property of the snapshot-at-router- phase design — the upstream filter has no view of Envoy's current body, by design, to avoid re-buffering through ext_proc at the upstream phase. Fixing it requires a separate design (either re-buffering at upstream, or propagating a diff via dynamic metadata) and should be its own PR. **Root cause of the narrow bug.** The existing safety net in `applyBodyMutation` looks like it covers the no-config case: if bodyMutator == nil { return bodyMutation } but it does not fire in practice. `bodymutator.NewBodyMutator(nil, ...)` returns a non-nil struct even when its `*filterapi.HTTPBodyMutation` argument is nil. So the early-return is dead code; the function falls through, calls `Mutate(originalRequestBodyRaw)` on a no-config mutator (which returns its input unchanged), wraps that in a `BodyMutation`, and the upstream filter sends `CONTINUE_AND_REPLACE` with the original body — even though nothing asked for a body replacement. **Fix:** * Add `BodyMutator.HasMutations()` predicate. `NewBodyMutator`'s contract is unchanged (it still returns non-nil); callers can ask whether the mutator actually has anything to do. * In `upstreamProcessor.ProcessRequestHeaders`, compute mutatorHasMutations := u.bodyMutator != nil && u.bodyMutator.HasMutations() wantBodyReplace := bodyMutation != nil || forceBodyMutation || mutatorHasMutations before calling `applyBodyMutation`. When false, skip the body-mutation work and emit `CONTINUE` instead of `CONTINUE_AND_REPLACE`, preserving translator header mutations (e.g. path rewrite), header-mutator output, and auth-handler header additions. Skip the content-length dynamic-metadata restamp on the `CONTINUE` branch since the body length did not change. All existing `CONTINUE_AND_REPLACE` callers stay on the existing path (these are the branches where this PR explicitly does not change behavior, including the loss-of-earlier-mutation property documented above): * Translator emits a body (AWS Bedrock/SigV4, OpenAI to Anthropic, OpenAI to Vertex, etc.) — `bodyMutation != nil`. * Backend `HTTPBodyMutation` configured — `HasMutations() == true`. * Retry — `forceBodyMutation == true` via `u.onRetry()`. * Streaming with `IncludeUsage=false` — `forceBodyMutation == true`. * Model override — translator emits `newBody` via `sjson.SetBytesOptions`, so `bodyMutation != nil`. **Tests:** * Added `Test_chatCompletionProcessorUpstreamFilter_ProcessRequestHeaders_BodyReplaceContract` with two subtests: * `no translator body, no mutator, no force -> CONTINUE` exercises the previously untested path. Asserts `Status == CONTINUE`, no `BodyMutation`, preserved translator and auth-handler header mutations, and `DynamicMetadata == nil` (no content-length restamp). * `translator body present -> CONTINUE_AND_REPLACE` pins the existing behavior so a future refactor cannot quietly flip the contract back. The coverage gap that let this ship: every existing `t.Run("ok", ...)` subtest under `Test_chatCompletionProcessorUpstreamFilter_ProcessRequestHeaders` set `retBodyMutation` on the mock translator, so the "translator returns nil body" path was never exercised. **Related Issues/PRs (if applicable)** None. **Special notes for reviewers (if applicable)** * The fix is request-side only. Response-side code is untouched. * `NewBodyMutator`'s contract is intentionally not changed (it still returns non-nil even when given a nil `*filterapi.HTTPBodyMutation`). A predicate is added instead, to keep the blast radius local to `ProcessRequestHeaders`. If reviewers prefer changing the constructor to return nil in the no-config case, that is a larger refactor and a separate PR. * The bug is in the generic `upstreamProcessor[...]`, so the fix applies to every endpoint spec (chat completions, messages, embeddings, completions, GCP, AWS Bedrock, etc.). The new tests exercise one endpoint spec for the same reason the existing `ProcessRequestHeaders` table-test does — locking the generic method's contract. Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description** **Problem** If a buffer filter (`envoy.filters.http.buffer`) is added to the chain, for example via an EnvoyPatchPolicy to raise the request buffer limit, the AI Gateway extproc could be placed ahead of it. The AI Gateway extproc runs with `RequestBodyMode: BUFFERED`, so when it runs before the buffer filter it buffers the body against Envoy Gateway's default 32 KiB downstream per-connection limit and returns `413 Payload Too Large` for larger bodies before the buffer filter's higher limit applies. The buffer filter raises the stream's buffer limit to `max_request_bytes`, but only for filters that decode after it. This was hit in practice with large request bodies such as Gemini CLI tool definitions. **Solution** When a buffer filter sits at or after the computed ext_proc insertion point, insert the AI Gateway extproc immediately after the last buffer filter. Envoy Gateway already orders the buffer filter before ext_proc, so this honors that order. Behavior is unchanged when no buffer filter is present. This works because EnvoyPatchPolicy patches are applied before the extension hook runs and Envoy Gateway does not re-sort filters afterward, so the buffer filter is visible to this code. The extension server only moves its own filter, not the user's buffer filter, so this fixes the 413 for AI Gateway's extproc specifically and not for other co-resident BUFFERED ext_procs. **Testing** Added table tests for three cases: ext_proc before buffer (inserted after buffer), buffer before ext_proc (inserted after buffer), and no buffer filter (unchanged). Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description** This updates the homepage info Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
Signed-off-by: Ignasi Barrera <nacx@apache.org>
**Description** Limit by default the size of MCP request payloads. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A Signed-off-by: Ignasi Barrera <nacx@apache.org>
**Description** Bind pprof to localhost so it is only accessible by default from the local pod or via kubectl port-forward. Since it is for debugging purposes, it does not need to listen on `0.0.0.0`. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
envoyproxy#2239) **Description** `ExtractTokenUsageFromExplicitCaching` is called in both start message and the delta message, as a result. The usage report is not correct. Fix: remove the accumulation in the message delta; also the previous tests can pass because the test cases did not mock the real cases, update all related tests cases as well. --------- Signed-off-by: yxia216 <yxia216@bloomberg.net> Signed-off-by: Aaron Choo <achoo30@bloomberg.net> Signed-off-by: Anurag Aggarwal <kanurag94@gmail.com> Signed-off-by: Aishwarya <aishwarya.raimule@nutanix.com> Signed-off-by: aishwaryaraimule21 <aishwarya.raimule@nutanix.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Hritik003 <hritik.raj@nutanix.com> Signed-off-by: Linus Schlumberger <linus.schlumberger@siemens.com> Signed-off-by: Ignasi Barrera <nacx@apache.org> Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com> Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com> Signed-off-by: hustxiayang <yxia216@bloomberg.net> Signed-off-by: hustxiayang <yangxiast@gmail.com> Co-authored-by: Aaron Choo <achoo30@bloomberg.net> Co-authored-by: Anurag Aggarwal <kanurag94@gmail.com> Co-authored-by: aishwaryaraimule21 <aishwarya.raimule@nutanix.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io> Co-authored-by: Hritik Raj <hritik.raj@nutanix.com> Co-authored-by: Linus Schlumberger <linus.schlumberger@siemens.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com> Co-authored-by: Takeshi Yoneda <t.y.mathetake@gmail.com> Co-authored-by: Ignasi Barrera <nacx@apache.org>
**Description** ServiceQuota currently needs to be implemented. The extension server does not inject the descriptor set but the rate limit config is properly configured. Adding it as a TODO/follow up. Signed-off-by: achoo30 <achoo30@bloomberg.net>
**Description** The failover logic depends on an Envoyproxy commit that has not been officially released. Marking that feature as a todo and will enable it once the changes are stable. Signed-off-by: achoo30 <achoo30@bloomberg.net>
**Description** This commit fixes my affiliation Signed-off-by: Takeshi Yoneda <tyoneda@netflix.com>
…oyproxy#2256) Bumps the go group with 8 updates in the / directory: | Package | From | To | | --- | --- | --- | | [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) | `1.41.7` | `1.41.11` | | [github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream](https://github.com/aws/aws-sdk-go-v2) | `1.7.10` | `1.7.12` | | [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) | `1.32.18` | `1.32.22` | | [github.com/bytedance/sonic](https://github.com/bytedance/sonic) | `1.15.1` | `1.15.2` | | [github.com/openai/openai-go/v3](https://github.com/openai/openai-go) | `3.37.0` | `3.39.0` | | [github.com/prometheus/common](https://github.com/prometheus/common) | `0.67.5` | `0.68.1` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.282.0` | `0.283.0` | | [google.golang.org/genai](https://github.com/googleapis/go-genai) | `1.58.0` | `1.59.0` | Updates `github.com/aws/aws-sdk-go-v2` from 1.41.7 to 1.41.11 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/fa369bd7bb9576e85ac094a43a15e8372a3d0129"><code>fa369bd</code></a> Release 2026-06-03</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/960ee4dc8380a46ded94f3976e073242d42bf8ed"><code>960ee4d</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/4b6df8b301a6c965903012dda08e9f38fd163f1c"><code>4b6df8b</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/30b15dd22cc690c7d647c32f415111437cfbed2a"><code>30b15dd</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/e8c72af3150fa9c8898c916b2e213a5d3d7d64ed"><code>e8c72af</code></a> enable schema-serde (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3421">#3421</a>)</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/b4d02c534cf7f5c782e10bc3f66e40c081a7bb3a"><code>b4d02c5</code></a> Release 2026-06-02</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/48e375b484e0ae917f61904db440ef17382093d1"><code>48e375b</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/b8a4fc132e65d8310e2de67e0600eec53e2f4b26"><code>b8a4fc1</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/e8627b4cc01977004c41ff0f42670a44d500982d"><code>e8627b4</code></a> Merge pull request <a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3430">#3430</a> from aws/fix-remove-ioutil</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/4e258a368c5b421d28bae4a18e718b1b4c7dd16a"><code>4e258a3</code></a> chore: update changelog description per review</li> <li>Additional commits viewable in <a href="https://github.com/aws/aws-sdk-go-v2/compare/v1.41.7...v1.41.11">compare view</a></li> </ul> </details> <br /> Updates `github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream` from 1.7.10 to 1.7.12 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/93c3f1871b862d743e0bd2e2e7180246df3a9212"><code>93c3f18</code></a> Release 2022-12-02</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/7254028f8bc89095326d9e3657fdbc98b98cca94"><code>7254028</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/f43ad83db1b3da1c2ea37857524148c91189cb4c"><code>f43ad83</code></a> Update SDK's smithy-go dependency to v1.13.5</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/77d257ee120e67d45a5de6f0d6478f313a21b92a"><code>77d257e</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/779e29ff5a4bcebe1ab7088ab12c4c95ce06f8aa"><code>779e29f</code></a> Release 2022-12-01</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/f64d7d2b0a0033996b32ba9e1b18e5a923452b84"><code>f64d7d2</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/9bc59f75ee4683ca886c3d701b49bb81db2efd4d"><code>9bc59f7</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/d9c18aa2bdd4c237a4919452f58e29c20ba484cc"><code>d9c18aa</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/0259b169b753daf77ad332c680a9ad1e3f56753d"><code>0259b16</code></a> Release 2022-11-30</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/ee0277f1abad4856afc13ced2bfb90a43dbd9d34"><code>ee0277f</code></a> Regenerated Clients</li> <li>Additional commits viewable in <a href="https://github.com/aws/aws-sdk-go-v2/compare/service/account/v1.7.10...service/account/v1.7.12">compare view</a></li> </ul> </details> <br /> Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.18 to 1.32.22 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/fa369bd7bb9576e85ac094a43a15e8372a3d0129"><code>fa369bd</code></a> Release 2026-06-03</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/960ee4dc8380a46ded94f3976e073242d42bf8ed"><code>960ee4d</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/4b6df8b301a6c965903012dda08e9f38fd163f1c"><code>4b6df8b</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/30b15dd22cc690c7d647c32f415111437cfbed2a"><code>30b15dd</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/e8c72af3150fa9c8898c916b2e213a5d3d7d64ed"><code>e8c72af</code></a> enable schema-serde (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3421">#3421</a>)</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/b4d02c534cf7f5c782e10bc3f66e40c081a7bb3a"><code>b4d02c5</code></a> Release 2026-06-02</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/48e375b484e0ae917f61904db440ef17382093d1"><code>48e375b</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/b8a4fc132e65d8310e2de67e0600eec53e2f4b26"><code>b8a4fc1</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/e8627b4cc01977004c41ff0f42670a44d500982d"><code>e8627b4</code></a> Merge pull request <a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3430">#3430</a> from aws/fix-remove-ioutil</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/4e258a368c5b421d28bae4a18e718b1b4c7dd16a"><code>4e258a3</code></a> chore: update changelog description per review</li> <li>Additional commits viewable in <a href="https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.18...config/v1.32.22">compare view</a></li> </ul> </details> <br /> Updates `github.com/aws/aws-sdk-go-v2/service/sts` from 1.42.1 to 1.43.1 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/b3e07aa0a0dd26ec46095c28ce65301da2e78dba"><code>b3e07aa</code></a> Release 2023-11-20</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/2fc1c0dab14dff82fc2c2465cb7c40a4157196a0"><code>2fc1c0d</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/1a6bd026243230178e775059d27038c0ced194ea"><code>1a6bd02</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/ac2c871bff4a9fbb6284f1dcc061fdcabea346f3"><code>ac2c871</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/03c6858107f8c4c85637c18e1b643e33ca4575c0"><code>03c6858</code></a> deprecate v4.SignHTTPRequestMiddleware (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/2375">#2375</a>)</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/0be05fa6cc06d8e81eda10cbf8413030754c4df6"><code>0be05fa</code></a> Release 2023-11-17</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/d0c9d422756e7eb30b9937468e659b140fc5e578"><code>d0c9d42</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/e2ede4019d693a352b0ccbb0b87dd74c1fb4990e"><code>e2ede40</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/7720f87d0ec2f3609e2912c864b6f9ae550e0792"><code>7720f87</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/4bd06b93f8627928c17604383bd8639f2cb23739"><code>4bd06b9</code></a> Merge customizations for service s3</li> <li>Additional commits viewable in <a href="https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.42.1...service/s3/v1.43.1">compare view</a></li> </ul> </details> <br /> Updates `github.com/bytedance/sonic` from 1.15.1 to 1.15.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/bytedance/sonic/releases">github.com/bytedance/sonic's releases</a>.</em></p> <blockquote> <h2>v1.15.2</h2> <h2>What's Changed</h2> <ul> <li>rebase: update dev_hw with latest main by <a href="https://github.com/hellohw188"><code>@hellohw188</code></a> in <a href="https://redirect.github.com/bytedance/sonic/pull/937">bytedance/sonic#937</a></li> <li>Revert "rebase: update dev_hw with latest main" by <a href="https://github.com/liuq19"><code>@liuq19</code></a> in <a href="https://redirect.github.com/bytedance/sonic/pull/941">bytedance/sonic#941</a></li> <li>fix: align map runtime compatibility with Go 1.24+ by <a href="https://github.com/liuq19"><code>@liuq19</code></a> in <a href="https://redirect.github.com/bytedance/sonic/pull/951">bytedance/sonic#951</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/bytedance/sonic/compare/v1.15.1...v1.15.2">https://github.com/bytedance/sonic/compare/v1.15.1...v1.15.2</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/bytedance/sonic/commit/579b6ffa7b3b36665600615500a2bf2d59964c5c"><code>579b6ff</code></a> fix: use legacy map iterator shim</li> <li><a href="https://github.com/bytedance/sonic/commit/d77451355d8ae076459356fb89aac3b1c837e027"><code>d774513</code></a> fix: align map runtime tags with Go 1.24</li> <li><a href="https://github.com/bytedance/sonic/commit/47cc3ed0c10b735127abdba4651b0f939949ff2a"><code>47cc3ed</code></a> Revert "rebase: update dev_hw with latest main" (<a href="https://redirect.github.com/bytedance/sonic/issues/941">#941</a>)</li> <li><a href="https://github.com/bytedance/sonic/commit/fdf817a24dedf68ee60c13a50b887d99eb6b0dfa"><code>fdf817a</code></a> chore: update llvm</li> <li><a href="https://github.com/bytedance/sonic/commit/93044d2e5efd844250915435020a3885f8326c2c"><code>93044d2</code></a> fix:add pretouchRecX86 in arm64 and add !arm64 to loader_go117_test.go</li> <li><a href="https://github.com/bytedance/sonic/commit/59cca7ca115c17b5a15b9731b10a4040982440fe"><code>59cca7c</code></a> feat: update sve_linkname|sve_wrapgoc with asm2arm_tool</li> <li><a href="https://github.com/bytedance/sonic/commit/76dcf4a830bb447aaaffc702468eb0768d9cc05f"><code>76dcf4a</code></a> chore: add asm2arm_tool execution and test scripts</li> <li><a href="https://github.com/bytedance/sonic/commit/ccddb06137cc52e0ef6bb3d5d16ac08e364c7e98"><code>ccddb06</code></a> feat: add SL mode support for asm2arm_tool</li> <li><a href="https://github.com/bytedance/sonic/commit/a756ce4d6c940eba7a2bca9817ab1c2d9c025280"><code>a756ce4</code></a> feat: add JIT mode support for asm2arm_tool</li> <li><a href="https://github.com/bytedance/sonic/commit/1d176268eb2cea9dc083e18b38537d9e14141e37"><code>1d17626</code></a> feat: use SVE acceleration in linkname and wrapgoc</li> <li>Additional commits viewable in <a href="https://github.com/bytedance/sonic/compare/v1.15.1...v1.15.2">compare view</a></li> </ul> </details> <br /> Updates `github.com/openai/openai-go/v3` from 3.37.0 to 3.39.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/openai/openai-go/releases">github.com/openai/openai-go/v3's releases</a>.</em></p> <blockquote> <h2>v3.39.0</h2> <h2>3.39.0 (2026-06-03)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-%5Bgo/compare/v3.38.0...v3.39.0%5D(https://www.golinks.io/compare/v3.38.0...v3.39.0?trackSource=github)">v3.38.0...v3.39.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> responses.moderation and chat_completions.moderation (<a href="https://github.com/openai/openai-%5Bgo/commit/7a2dac0ddf6b92dfcaa45b190dbe7f51368e199c%5D(https://www.golinks.io/commit/7a2dac0ddf6b92dfcaa45b190dbe7f51368e199c?trackSource=github)">7a2dac0</a>)</li> </ul> <h2>v3.38.0</h2> <h2>3.38.0 (2026-06-01)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.37.0...v3.38.0">v3.37.0...v3.38.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> manual updates (<a href="https://github.com/openai/openai-go/commit/d7dac8192c292d882cb765d3379e10427930979e">d7dac81</a>)</li> <li><strong>api:</strong> workload identity in audit logs, additional_tools item in responses, fix ActionSearch.query to be optional. (<a href="https://github.com/openai/openai-go/commit/4c3981cfabc98ec1d67c2baf7c6a891ef6640f96">4c3981c</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/openai/openai-go/blob/main/CHANGELOG.md">github.com/openai/openai-go/v3's changelog</a>.</em></p> <blockquote> <h2>3.39.0 (2026-06-03)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.38.0...v3.39.0">v3.38.0...v3.39.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> responses.moderation and chat_completions.moderation (<a href="https://github.com/openai/openai-go/commit/7a2dac0ddf6b92dfcaa45b190dbe7f51368e199c">7a2dac0</a>)</li> </ul> <h2>3.38.0 (2026-06-01)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.37.0...v3.38.0">v3.37.0...v3.38.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> manual updates (<a href="https://github.com/openai/openai-go/commit/d7dac8192c292d882cb765d3379e10427930979e">d7dac81</a>)</li> <li><strong>api:</strong> workload identity in audit logs, additional_tools item in responses, fix ActionSearch.query to be optional. (<a href="https://github.com/openai/openai-go/commit/4c3981cfabc98ec1d67c2baf7c6a891ef6640f96">4c3981c</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/openai/openai-go/commit/bfe92982d403b8eae7a355eb6a86650ee20b3570"><code>bfe9298</code></a> release: 3.39.0</li> <li><a href="https://github.com/openai/openai-go/commit/b256c9a1cf224ae0cad685e9072968dba7932693"><code>b256c9a</code></a> feat(api): responses.moderation and chat_completions.moderation</li> <li><a href="https://github.com/openai/openai-go/commit/fd8c615caa0b247c5a9de7318f457df1a014ea22"><code>fd8c615</code></a> codegen metadata</li> <li><a href="https://github.com/openai/openai-go/commit/f25b030d119ec829f5dd78db9e05eff31b8f178d"><code>f25b030</code></a> release: 3.38.0</li> <li><a href="https://github.com/openai/openai-go/commit/08e89a6fc0acbacf4645e16183e1130486e8a5de"><code>08e89a6</code></a> feat(api): workload identity in audit logs, additional_tools item in response...</li> <li>See full diff in <a href="https://github.com/openai/openai-go/compare/v3.37.0...v3.39.0">compare view</a></li> </ul> </details> <br /> Updates `github.com/prometheus/common` from 0.67.5 to 0.68.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/prometheus/common/releases">github.com/prometheus/common's releases</a>.</em></p> <blockquote> <h2>v0.68.1</h2> <h2>What's Changed</h2> <ul> <li>build(deps): bump golang.org/x/net from 0.52.0 to 0.53.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/903">prometheus/common#903</a></li> <li>build(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/914">prometheus/common#914</a></li> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/915">prometheus/common#915</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/prometheus/common/compare/v0.68.0...v0.68.1">https://github.com/prometheus/common/compare/v0.68.0...v0.68.1</a></p> <h2>v0.68.0</h2> <h2>What's Changed</h2> <ul> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/873">prometheus/common#873</a></li> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/874">prometheus/common#874</a></li> <li>build(deps): bump github.com/golang-jwt/jwt/v5 from 5.3.0 to 5.3.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/879">prometheus/common#879</a></li> <li>build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/878">prometheus/common#878</a></li> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/875">prometheus/common#875</a></li> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/880">prometheus/common#880</a></li> <li>Remove logic adding unit to metrics name by <a href="https://github.com/vesari"><code>@vesari</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/877">prometheus/common#877</a></li> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/881">prometheus/common#881</a></li> <li>Update for Go 1.26 by <a href="https://github.com/SuperQ"><code>@SuperQ</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/883">prometheus/common#883</a></li> <li>build(deps): bump golang.org/x/net from 0.49.0 to 0.51.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/882">prometheus/common#882</a></li> <li>version: Add a slog helper by <a href="https://github.com/SuperQ"><code>@SuperQ</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/886">prometheus/common#886</a></li> <li>Remove Arthur from maintainers list by <a href="https://github.com/ArthurSens"><code>@ArthurSens</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/885">prometheus/common#885</a></li> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/895">prometheus/common#895</a></li> <li>Synchronize common files from prometheus/prometheus by <a href="https://github.com/prombot"><code>@prombot</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/896">prometheus/common#896</a></li> <li>config: change NewOAuth2RoundTripper to accept variadic HTTPClientOption by <a href="https://github.com/alliasgher"><code>@alliasgher</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/898">prometheus/common#898</a></li> <li>config: guard against nil oauth2 credential in RoundTrip by <a href="https://github.com/alliasgher"><code>@alliasgher</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/897">prometheus/common#897</a></li> <li>build(deps): bump golang.org/x/net from 0.51.0 to 0.52.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/890">prometheus/common#890</a></li> <li>build(deps): bump go.yaml.in/yaml/v2 from 2.4.3 to 2.4.4 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/891">prometheus/common#891</a></li> <li>build(deps): bump golang.org/x/oauth2 from 0.34.0 to 0.36.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/prometheus/common/pull/892">prometheus/common#892</a></li> <li>Move interface assertions to a test file by <a href="https://github.com/msiegen"><code>@msiegen</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/839">prometheus/common#839</a></li> <li>fix(http_config): fix client cert rotation when no CA is configured by <a href="https://github.com/machine424"><code>@machine424</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/908">prometheus/common#908</a></li> <li>Remove CircleCI by <a href="https://github.com/ArthurSens"><code>@ArthurSens</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/910">prometheus/common#910</a></li> <li>Fix: apply DialContextFunc to OAuth2 token-fetch transport by <a href="https://github.com/yuri-tceretian"><code>@yuri-tceretian</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/911">prometheus/common#911</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/alliasgher"><code>@alliasgher</code></a> made their first contribution in <a href="https://redirect.github.com/prometheus/common/pull/898">prometheus/common#898</a></li> <li><a href="https://github.com/msiegen"><code>@msiegen</code></a> made their first contribution in <a href="https://redirect.github.com/prometheus/common/pull/839">prometheus/common#839</a></li> <li><a href="https://github.com/machine424"><code>@machine424</code></a> made their first contribution in <a href="https://redirect.github.com/prometheus/common/pull/908">prometheus/common#908</a></li> <li><a href="https://github.com/yuri-tceretian"><code>@yuri-tceretian</code></a> made their first contribution in <a href="https://redirect.github.com/prometheus/common/pull/911">prometheus/common#911</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/prometheus/common/compare/v0.67.5...v0.68.0">https://github.com/prometheus/common/compare/v0.67.5...v0.68.0</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/prometheus/common/blob/main/CHANGELOG.md">github.com/prometheus/common's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <h2>main / unreleased</h2> <h3>What's Changed</h3> <h2>v0.69.0 / 2026-06-17</h2> <h3>Security / behavior changes</h3> <ul> <li><strong>config: credentials are no longer forwarded across cross-host redirects.</strong> When <code>FollowRedirects</code> is enabled, the HTTP client now strips <code>Authorization</code>, <code>Cookie</code>, <code>Proxy-Authorization</code> and other sensitive headers, and skips basic-auth, bearer-token and OAuth2 credentials, when a redirect points to a different host. This aligns with Go's <code>net/http</code> behavior. Callers that relied on credentials being sent to a redirect target on another host will need to target that host directly. <a href="https://redirect.github.com/prometheus/common/issues/901">#901</a> <a href="https://redirect.github.com/prometheus/common/issues/920">#920</a> <a href="https://redirect.github.com/prometheus/common/issues/921">#921</a></li> <li>config: <code>LoadHTTPConfigFile</code> now resolves relative file paths (e.g. <code>*_file</code> credentials, <code>http_headers</code> files) against the config file's own directory instead of its parent directory. Configs that worked around the old behavior by prefixing paths with the config's directory name must drop that prefix. <a href="https://redirect.github.com/prometheus/common/issues/925">#925</a></li> </ul> <h3>Bugfixes</h3> <ul> <li>expfmt: fix nil pointer panic when parsing empty braces <code>{}</code>. <a href="https://redirect.github.com/prometheus/common/issues/922">#922</a></li> <li>model: fix <code>Time.UnmarshalJSON</code> for larger negative numbers. <a href="https://redirect.github.com/prometheus/common/issues/918">#918</a></li> </ul> <h3>Performance</h3> <ul> <li>model: reduce allocations in <code>Time.UnmarshalJSON</code>. <a href="https://redirect.github.com/prometheus/common/issues/918">#918</a></li> </ul> <h3>Internal</h3> <ul> <li>Synchronize common files from prometheus/prometheus. <a href="https://redirect.github.com/prometheus/common/issues/917">#917</a></li> <li>Modernize Go. <a href="https://redirect.github.com/prometheus/common/issues/919">#919</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/prometheus/common/compare/v0.68.1...v0.69.0">https://github.com/prometheus/common/compare/v0.68.1...v0.69.0</a></p> <h2>v0.67.2 / 2025-10-28</h2> <h2>What's Changed</h2> <ul> <li>config: Fix panic in <code>tlsRoundTripper</code> when CA file is absent by <a href="https://github.com/ndk"><code>@ndk</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/792">prometheus/common#792</a></li> <li>Cleanup linting issues by <a href="https://github.com/SuperQ"><code>@SuperQ</code></a> in <a href="https://redirect.github.com/prometheus/common/pull/860">prometheus/common#860</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/ndk"><code>@ndk</code></a> made their first contribution in <a href="https://redirect.github.com/prometheus/common/pull/792">prometheus/common#792</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/prometheus/common/compare/v0.67.1...v0.67.2">https://github.com/prometheus/common/compare/v0.67.1...v0.67.2</a></p> <h2>v0.67.1 / 2025-10-07</h2> <h2>What's Changed</h2> <ul> <li>Remove VERSION file to avoid Go conflict error in <a href="https://redirect.github.com/prometheus/common/pull/853">prometheus/common#853</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/prometheus/common/compare/v0.67.0...v0.67.1">https://github.com/prometheus/common/compare/v0.67.0...v0.67.1</a></p> <h2>v0.67.0 / 2025-10-07</h2> <h2>What's Changed</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/prometheus/common/commit/212057321e897d625d07379aaddaca01afca7710"><code>2120573</code></a> Update common Prometheus files (<a href="https://redirect.github.com/prometheus/common/issues/915">#915</a>)</li> <li><a href="https://github.com/prometheus/common/commit/228386adfe1e9c8ede570fbca47782a9abca1a35"><code>228386a</code></a> build(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 (<a href="https://redirect.github.com/prometheus/common/issues/914">#914</a>)</li> <li><a href="https://github.com/prometheus/common/commit/b8c88b4866403159e523c588dc7563b0f78c0418"><code>b8c88b4</code></a> build(deps): bump golang.org/x/net from 0.52.0 to 0.53.0 (<a href="https://redirect.github.com/prometheus/common/issues/903">#903</a>)</li> <li><a href="https://github.com/prometheus/common/commit/1e0ae832fb26a2c20c2c0d6ee1289111c668be18"><code>1e0ae83</code></a> config: apply DialContextFunc to OAuth2 token-fetch transport (<a href="https://redirect.github.com/prometheus/common/issues/911">#911</a>)</li> <li><a href="https://github.com/prometheus/common/commit/b51d01ba2175d103309dcee11f6c01bd03487a64"><code>b51d01b</code></a> Remove CircleCI (<a href="https://redirect.github.com/prometheus/common/issues/910">#910</a>)</li> <li><a href="https://github.com/prometheus/common/commit/0f3c348807322ea84d92fc7688b1b37a08e17d1f"><code>0f3c348</code></a> Merge pull request <a href="https://redirect.github.com/prometheus/common/issues/908">#908</a> from machine424/ttlsco</li> <li><a href="https://github.com/prometheus/common/commit/732a9cf781621a8d8f895ef933b78cf4e9f5d6af"><code>732a9cf</code></a> fix(http_config): fix client cert rotation when no CA is configured</li> <li><a href="https://github.com/prometheus/common/commit/ce9215c53d8c8e507c5f72a69d80568c072be3d9"><code>ce9215c</code></a> Move interface assertions to a test file (<a href="https://redirect.github.com/prometheus/common/issues/839">#839</a>)</li> <li><a href="https://github.com/prometheus/common/commit/1ba5ed78ffdaf199c6dded3ff8ac88edbdb53712"><code>1ba5ed7</code></a> build(deps): bump golang.org/x/oauth2 from 0.34.0 to 0.36.0 (<a href="https://redirect.github.com/prometheus/common/issues/892">#892</a>)</li> <li><a href="https://github.com/prometheus/common/commit/8f8ada69df73ad76cabef710856070a42ef420c0"><code>8f8ada6</code></a> build(deps): bump go.yaml.in/yaml/v2 from 2.4.3 to 2.4.4 (<a href="https://redirect.github.com/prometheus/common/issues/891">#891</a>)</li> <li>Additional commits viewable in <a href="https://github.com/prometheus/common/compare/v0.67.5...v0.68.1">compare view</a></li> </ul> </details> <br /> Updates `google.golang.org/api` from 0.282.0 to 0.283.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/google-api-go-client/releases">google.golang.org/api's releases</a>.</em></p> <blockquote> <h2>v0.283.0</h2> <h2><a href="https://github.com/googleapis/google-api-go-client/compare/v0.282.0...v0.283.0">0.283.0</a> (2026-06-01)</h2> <h3>Features</h3> <ul> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3609">#3609</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/ed84bb800c56d3f7fee4c11f96673114e94a8cc2">ed84bb8</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3611">#3611</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/3855346eda7f4ba6c844d86de5de493d3e395f00">3855346</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3612">#3612</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/32624d32240ec8e5997810fb9cb54f8000b6c7f8">32624d3</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md">google.golang.org/api's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/googleapis/google-api-go-client/compare/v0.282.0...v0.283.0">0.283.0</a> (2026-06-01)</h2> <h3>Features</h3> <ul> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3609">#3609</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/ed84bb800c56d3f7fee4c11f96673114e94a8cc2">ed84bb8</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3611">#3611</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/3855346eda7f4ba6c844d86de5de493d3e395f00">3855346</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3612">#3612</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/32624d32240ec8e5997810fb9cb54f8000b6c7f8">32624d3</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/googleapis/google-api-go-client/commit/f6726366ff2f0b8fc82cec6f063dc9beb3ab1377"><code>f672636</code></a> chore(main): release 0.283.0 (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3610">#3610</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/32624d32240ec8e5997810fb9cb54f8000b6c7f8"><code>32624d3</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3612">#3612</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/3855346eda7f4ba6c844d86de5de493d3e395f00"><code>3855346</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3611">#3611</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/ed84bb800c56d3f7fee4c11f96673114e94a8cc2"><code>ed84bb8</code></a> feat(all): auto-regenerate discovery clients (<a href="https://redirect.github.com/googleapis/google-api-go-client/issues/3609">#3609</a>)</li> <li>See full diff in <a href="https://github.com/googleapis/google-api-go-client/compare/v0.282.0...v0.283.0">compare view</a></li> </ul> </details> <br /> Updates `google.golang.org/genai` from 1.58.0 to 1.59.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/go-genai/releases">google.golang.org/genai's releases</a>.</em></p> <blockquote> <h2>v1.59.0</h2> <h2><a href="https://github.com/googleapis/go-genai/compare/v1.58.0...v1.59.0">1.59.0</a> (2026-06-03)</h2> <h3>Features</h3> <ul> <li>Add Agent Platform MCP support to async generate_content (<a href="https://github.com/googleapis/go-genai/commit/4b138c23dba7df1d76626fbc4565d4838469ce96">4b138c2</a>)</li> <li>Add transcription language code. (<a href="https://github.com/googleapis/go-genai/commit/cc4dd9cdd6e3c09044493c439c89cb67254539de">cc4dd9c</a>)</li> <li>Add TranslationConfig for live translation. (<a href="https://github.com/googleapis/go-genai/commit/76f4126a18dbb6c4606f649e1f8400003364f785">76f4126</a>)</li> <li>additional computer_use field support for vertex. (<a href="https://github.com/googleapis/go-genai/commit/8831eb39c99879b30695b3c1262d70a0b2b25450">8831eb3</a>)</li> <li>Support 'additionalProperties', 'defs' and 'ref' in the GenerateContent.Schema type. (<a href="https://github.com/googleapis/go-genai/commit/996b8316fdc4dfe1bb5d70e3af45542a4a55bf9e">996b831</a>)</li> <li>Support Reinforcement Tuning in GenAI SDK (<a href="https://github.com/googleapis/go-genai/commit/fecb49e3d7870921be23054457b7b5163b8bba4f">fecb49e</a>)</li> <li>Support ReinforcementTuning in GenAI SDK including ValidateReward API method. (<a href="https://github.com/googleapis/go-genai/commit/c95d115482daa0e69a02b25c239bd232bf62f054">c95d115</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md">google.golang.org/genai's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/googleapis/go-genai/compare/v1.58.0...v1.59.0">1.59.0</a> (2026-06-03)</h2> <h3>Features</h3> <ul> <li>Add Agent Platform MCP support to async generate_content (<a href="https://github.com/googleapis/go-genai/commit/4b138c23dba7df1d76626fbc4565d4838469ce96">4b138c2</a>)</li> <li>Add transcription language code. (<a href="https://github.com/googleapis/go-genai/commit/cc4dd9cdd6e3c09044493c439c89cb67254539de">cc4dd9c</a>)</li> <li>Add TranslationConfig for live translation. (<a href="https://github.com/googleapis/go-genai/commit/76f4126a18dbb6c4606f649e1f8400003364f785">76f4126</a>)</li> <li>additional computer_use field support for vertex. (<a href="https://github.com/googleapis/go-genai/commit/8831eb39c99879b30695b3c1262d70a0b2b25450">8831eb3</a>)</li> <li>Support 'additionalProperties', 'defs' and 'ref' in the GenerateContent.Schema type. (<a href="https://github.com/googleapis/go-genai/commit/996b8316fdc4dfe1bb5d70e3af45542a4a55bf9e">996b831</a>)</li> <li>Support Reinforcement Tuning in GenAI SDK (<a href="https://github.com/googleapis/go-genai/commit/fecb49e3d7870921be23054457b7b5163b8bba4f">fecb49e</a>)</li> <li>Support ReinforcementTuning in GenAI SDK including ValidateReward API method. (<a href="https://github.com/googleapis/go-genai/commit/c95d115482daa0e69a02b25c239bd232bf62f054">c95d115</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/googleapis/go-genai/commit/bba8883a9ecbbb04ee5d5e3a2b665136483b7ce2"><code>bba8883</code></a> chore(main): release 1.59.0 (<a href="https://redirect.github.com/googleapis/go-genai/issues/799">#799</a>)</li> <li><a href="https://github.com/googleapis/go-genai/commit/c95d115482daa0e69a02b25c239bd232bf62f054"><code>c95d115</code></a> feat: Support ReinforcementTuning in GenAI SDK including ValidateReward API m...</li> <li><a href="https://github.com/googleapis/go-genai/commit/cc4dd9cdd6e3c09044493c439c89cb67254539de"><code>cc4dd9c</code></a> feat: Add transcription language code.</li> <li><a href="https://github.com/googleapis/go-genai/commit/d1ef633b5a7139cd0b92c935a7c480d2de137839"><code>d1ef633</code></a> chore: deprecate Google Maps grounding widget API fields</li> <li><a href="https://github.com/googleapis/go-genai/commit/76f4126a18dbb6c4606f649e1f8400003364f785"><code>76f4126</code></a> feat: Add TranslationConfig for live translation.</li> <li><a href="https://github.com/googleapis/go-genai/commit/4b138c23dba7df1d76626fbc4565d4838469ce96"><code>4b138c2</code></a> feat: Add Agent Platform MCP support to async generate_content</li> <li><a href="https://github.com/googleapis/go-genai/commit/2468757ab49e306020701e183d3d3a60b9328992"><code>2468757</code></a> chore: Remove 'additionalProperties', 'defs' and 'ref' in the GenerateContent...</li> <li><a href="https://github.com/googleapis/go-genai/commit/12650726cd492be68381b900f12e79308a07d467"><code>1265072</code></a> chore: Internal cleanup</li> <li><a href="https://github.com/googleapis/go-genai/commit/8831eb39c99879b30695b3c1262d70a0b2b25450"><code>8831eb3</code></a> feat: additional computer_use field support for vertex.</li> <li><a href="https://github.com/googleapis/go-genai/commit/996b8316fdc4dfe1bb5d70e3af45542a4a55bf9e"><code>996b831</code></a> feat: Support 'additionalProperties', 'defs' and 'ref' in the GenerateContent...</li> <li>Additional commits viewable in <a href="https://github.com/googleapis/go-genai/compare/v1.58.0...v1.59.0">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…yproxy#2274) **Description** The previous gateway controller code made assumptions about the namespace consistency across gateway resources. This change adds an explicit check and returns an error if there are inconsistencies. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
**Description** Set an upper bound for content blocks to prevent unreasonable values from eating up all memory. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
… pointers (envoyproxy#2242) **Description** Adds nil checks for tool call IDs before dereferencing the pointers. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A Signed-off-by: Ignasi Barrera <nacx@apache.org>
…logs (envoyproxy#2245) **Description** Implements the `slog.LogValuer` interface in the internal FilterAPI structs to avoid leaking sensitive fields into the logs if those types are used in log messages. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A --------- Signed-off-by: Ignasi Barrera <ignasi@tetrate.io> Co-authored-by: Aaron Choo <achoo30@bloomberg.net>
envoyproxy#2270) **Description** Prepare release documentation for the upcoming **v1.0.0** release. Docs-only change in two parts: - **`RELEASES.md`** — record the API stability commitment that motivates the major version bump. As of v1.0.0, `v1beta1` is the committed **stable** control-plane API and is covered by the existing "never break unless critical security" guarantee. `v1alpha1` remains served but deprecated and will be removed in a future release per the deprecation policy. `QuotaPolicy` stays `v1alpha1`-only and is therefore outside the stable surface; in particular its `serviceQuota` field is accepted but not yet enforced end-to-end. - **`site/docs/compatibility.md`** — add the `v1.0.x` row to the compatibility matrix (Envoy Gateway v1.8.x+, Envoy Proxy v1.38.x, Kubernetes v1.32+, Gateway API v1.5.x). No API, controller, or data-plane code changes. AI usage: these docs were drafted with assistance from Claude (Claude Code) and reviewed by the author. **Related Issues/PRs (if applicable)** **Special notes for reviewers (if applicable)** This is forward-looking v1.0 release-prep. The new `v1.0.x` compatibility row is marked `Supported` and the `RELEASES.md` wording says "as of the v1.0.0 release", even though v1.0.0 has not been tagged yet. Intent is for this to land as part of, or immediately before, the v1.0 cut rather than necessarily merging standalone today. Two items intentionally left to maintainers: - EOL rolling in the compatibility matrix. With the v0.7 to v1.0 major jump, which of v0.7.x / v0.6.x / v0.5.x roll to End of Life is a judgment call; this PR only adds the `v1.0.x` row and does not change existing support statuses. - The `serviceQuota` docs accuracy fix tracked on the `docs/quota-policy-accuracy` branch is complementary to the `RELEASES.md` note added here. --------- Signed-off-by: Erica Hughberg <erica.sundberg.90@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
**Description** Adds comprehensive documentation for the QuotaPolicy CRD, which was fully implemented but had no user-facing documentation. Covers service-wide quotas, per-model quotas, CEL cost expressions, Exclusive vs Shared bucket modes, client-selector based bucket rules, shadow mode, and duration format. Follows the structure of existing traffic capability guides. Distinguishes QuotaPolicy (total consumption budgets) from rate limiting (request velocity) to help adopters choose the right mechanism. **Related Issues/PRs (if applicable)** Related envoyproxy#1571 **Special notes for reviewers (if applicable)** All field definitions and semantics sourced from `api/v1alpha1/quota_policy.go` GoDoc comments. Includes complete, copy-pasteable YAML examples for every configuration option. --------- Signed-off-by: Erica Hughberg <erica.sundberg.90@gmail.com> Signed-off-by: Aaron Choo <achoo30@bloomberg.net> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Aaron Choo <achoo30@bloomberg.net>
…y#2240) **Description** A JSON `null` response body decodes into a nil `*ChatCompletionResponse` without an error, because the decode target is a `**ChatCompletionResponse` (`Decode(&resp)`). Some OpenAI-compatible backends return a `null` body with a 200 status (e.g. an upstream that aborts the response after committing headers under load). In the non-streaming path `ResponseBody` then dereferenced the nil response at `resp.Usage.PromptTokens`, panicking the ext-proc with a SIGSEGV (addr 0x80). `RedactBody` already guards `resp == nil`, so the nil case is known; the main path just missed it. This treats a nil response as an empty response: report zero token usage and fall back to the request model, mirroring the streaming path's behavior when no usage is present, rather than crashing. A regression test feeds a literal `null` body and asserts no panic and zero usage. Per the project's generative-AI policy: this change was prepared with the assistance of an AI coding tool (Claude Code). The submitter understands and takes full ownership of the change. **Related Issues/PRs (if applicable)** Fixes envoyproxy#2273 **Special notes for reviewers (if applicable)** N/A Signed-off-by: Kunwar Srivastav <kshivamsrivastav@gmail.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…yproxy#2237) **Description** Fix two bugs in the Anthropic-to-Bedrock translator message merging logic at `internal/translator/anthropic_awsbedrock.go`. **Bug 1: Wrong slice index (original report)** When system messages are present in the request body, `promoteAnthropicSystemMessagesToParam` filters them out, producing a shorter `messages` slice. The coalescing loop was using `body.Messages[i+1]` (the original unfiltered slice) instead of `messages[i+1]` (the filtered slice), causing index misalignment that could read wrong messages or panic with out-of-bounds access. **Bug 2: Coalescing logic was unreachable (root cause)** Tool result messages have `Role: "user"`, so they match `case anthropicschema.MessageRoleUser` and go through `convertUserMessage()` — which handles tool results individually but never coalesces consecutive ones. The coalescing logic in the `default` branch was dead code for tool results since they never reach that branch. **Changes** - Moved the `hasToolResult` check + coalescing loop into the `MessageRoleUser` case branch - Non-tool-result user messages still go through `convertUserMessage()` - Changed `body.Messages[i+1]` → `messages[i+1]` to use the correct filtered slice - Simplified the `default` branch to just return an error for unexpected roles - Updated existing test to expect coalesced output (3 messages instead of 4) - Added regression test with system messages to verify index alignment **Testing** - All existing translator tests pass - New `TestAnthropicToAWSBedrockTranslator_RequestBody_ToolResultMessagesWithSystemMessages` verifies the fix works when system messages are present alongside consecutive tool results --------- Signed-off-by: liuhy <liuhongyu@apache.org> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
v1.0.0 marks v1beta1 control-plane API as stable (per RELEASES.md). 46 commits since v0.7.0 — mostly bug fixes (Bedrock translator coalescing, Anthropic streaming usage double-counting, GCP camelCase JSON tags, MCP secret leak, RBAC empty-namespace) plus two feats: - openai → gcp embedContent translation for gemini-embedding-2 (envoyproxy#2114) - completion token details for Anthropic models (envoyproxy#2199) Conflicts resolved (2 files): - internal/apischema/gcp/gcp.go: fork's CachedContentRequest struct and upstream's new EmbedContent* structs were added at the same file-tail location. Kept both. - internal/translator/openai_gcpvertexai_test.go: upstream removed the "content-length" entry from expected wantHeaderMut across 10 test cases (consistent with the upstream change that no longer emits content-length when no body mutation is needed — fix: skip CONTINUE_AND_REPLACE when no body change is needed, envoyproxy#2170). Took upstream's version everywhere. Verified after merge: - go build ./... ✓ - go vet ./... ✓ - All affected unit tests pass (apischema/anthropic, apischema/openai, translator, extproc, endpointspec, mainlib, backendauth). - Fork-only feature tests pass: cachedContents translator (Vertex form + Developer API form), expandToVertexFullModelPath, rewriteVertexModelName, ImageEdits translator, server prefix fallback router, mainlib path extractors for cachedContents + region. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
router.ProcessRequestBody re-set x-ai-eg-original-path unconditionally, overwriting the pre-rewrite path stored by ProcessRequestHeaders. By the time ProcessRequestBody runs, r.requestHeaders[":path"] already holds the rewritten form (e.g. /cachedContents after /v1beta/cachedContents → /cachedContents), so upstream-filter's processorForPath then looked up /cachedContents — which is not a registered prefix — and returned no processor. The upstream filter silently produced no response and Envoy 60s-timed the request out (504 UT). The v0.7-era code had this exact guard; it was dropped in the v1.0.0 merge conflict resolution (upstream removed it, we accepted upstream's version). Restore the fork's guard so bump-through GET/DELETE bodyless requests still get the header from ProcessRequestHeaders and body-carrying requests don't clobber it in ProcessRequestBody. Symptom: POST /v1beta/cachedContents 504s with response_flags=UT after v1.0.0 deploy. Regression only affects paths that go through rewriteDeveloperAPIPath (cachedContents Developer-API form) — generateContent is unaffected because its :path rewrite happens in the upstream stage. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…xy#2291) **Description** When an upstream response is gzip-encoded but has an empty body, the gateway aborts a response that was actually fine. `decodeContentIfNeeded` builds a `gzip.NewReader` to decompress the body. `gzip.NewReader` reads the gzip header immediately, and over a zero-byte body that read returns `io.EOF`. The function returns that as `failed to decode gzip: EOF`, which the ext_proc layer treats as fatal, so the client gets nothing even though the upstream returned a successful response. We saw this in production as an ext_proc abort with `response_code: 200` but `bytes_sent: 0`. This happens when an upstream sends `Content-Encoding: gzip` with an empty body, or when a streaming response is buffered to end-of-stream with no payload (for example, the connection terminated before any body bytes arrived). The streaming path also runs the accumulated buffer through `decodeContentIfNeeded`, so an empty buffer hits the same error. The fix returns an empty body as-is instead of trying to build a decompressor. It is intentionally narrow: a non-empty but malformed gzip body still errors exactly as before, and only the zero-length case is treated as a pass-through. Tests: added an `empty gzip body` case to `TestDecodeContentIfNeeded` covering an empty body with `Content-Encoding: gzip`. `gofmt`, `go vet`, and the `internal/extproc` package tests pass. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** The guard lives in `decodeContentIfNeeded` rather than at the call sites because both the buffered and streaming paths flow through it, so a single check covers both. Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…yproxy#2289) **Description** The OpenAI-to-AWS Bedrock translator panics when streaming event serialization fails, causing the extproc container to crash. Instead of propagating the error upstream for graceful handling, the code calls `panic()` at `internal/translator/openai_awsbedrock.go:740`. **Location** `internal/translator/openai_awsbedrock.go:740` **Before:** ```go err = serializeOpenAIChatCompletionChunk(oaiEvent, &newBody) if err != nil { panic(fmt.Errorf("failed to marshal event: %w", err)) // ❌ PANIC } ``` **After:** ```go err = serializeOpenAIChatCompletionChunk(oaiEvent, &newBody) if err != nil { return nil, nil, metrics.TokenUsage{}, "", fmt.Errorf("failed to marshal streaming event: %w", err) } ``` **Root Cause** `serializeOpenAIChatCompletionChunk()` wraps `json.Marshal()` and returns an error when marshaling fails. When marshal fails (e.g., malformed chunk data or edge cases in converted Bedrock events), the streaming handler panics instead of returning an error. **Impact** - **Critical**: extproc crash disrupts all ongoing requests through the gateway - **No graceful degradation**: Clients receive connection errors, no meaningful error response - **Hard to debug**: Panic crashes the process without proper error logging - **Affects**: All streaming requests through AWS Bedrock backend **Fix** Replace `panic()` with proper error return, allowing Envoy to handle the failure gracefully. This pattern matches the error handling used elsewhere in the same file for non-streaming responses (e.g., line 754-756). **Testing** All existing Bedrock translator tests pass: ``` === RUN TestOpenAIToAWSBedrockTranslator --- PASS: TestOpenAIToAWSBedrockTranslator ``` **Files Changed** | File | Change | |------|--------| | `internal/translator/openai_awsbedrock.go` | panic → return error | --------- Signed-off-by: liuhy <liuhongyu@apache.org> Co-authored-by: Claude <noreply@anthropic.com>
…oyproxy#2339) **Description** `AIGatewayRoute` `rules[].backendRefs[]` accepts a `namespace` field, but when a backendRef points at an `InferencePool` in a different namespace, the controller generated the child `HTTPRoute` backendRef with the route's *own* namespace instead of the referenced one. The route then reported `ResolvedRefs: False` with `BackendNotFound: custom backend InferencePool <route-ns>/<pool-name> not found`, even with a valid `ReferenceGrant` in the pool's namespace. This PR makes the controller honor the `namespace` specified on an `InferencePool` backendRef when generating the `HTTPRoute`, and validates cross-namespace `InferencePool` references via `ReferenceGrant` — consistent with the existing `AIServiceBackend` behavior. Same-namespace references are unaffected and require no `ReferenceGrant`. Implementation notes: - `newHTTPRoute` now uses `backendRef.GetNamespace(route.Namespace)` for the generated `InferencePool` backendRef instead of hardcoding the route namespace. - The `referenceGrantValidator` is refactored to be generic over the target group/kind; `validateAIServiceBackendReference` is preserved as a thin wrapper (behavior unchanged) and a new `validateInferencePoolReference` is added. - The Gateway controller already resolved the `InferencePool`/`BackendSecurityPolicy` using the backendRef namespace, so fixing the generated `HTTPRoute` namespace completes the end-to-end path. **Related Issues/PRs (if applicable)** Fixes envoyproxy#2230 **Special notes for reviewers (if applicable)** Added unit tests: - `Test_newHTTPRoute_InferencePool_CrossNamespace` — namespace honored with a valid `ReferenceGrant`, rejected without one, and same-namespace needs no grant. - `TestReferenceGrantValidator_ValidateInferencePoolReference` — cross-namespace grant matching for `InferencePool` targets. Verified with `go build`, `go vet`, and `go test ./internal/controller/...` (all passing), and `gofmt`. Signed-off-by: liuhy <liuhongyu@apache.org>
…oyproxy#2236) **Description** The `message_delta` event handler in `anthropicStreamParser` was using `Add*` methods for input tokens, cached tokens, and cache creation tokens. However, the Anthropic API reports cumulative (not incremental) token counts in `message_delta`, and `message_start` already sets these values correctly via `ExtractTokenUsageFromExplicitCaching`. Using `Add` on top of the already-set cumulative values caused cache tokens to be counted twice. ### Bug Example With `input_tokens=9` and `cache_read_input_tokens=1`: | Step | Action | InputTokens | CachedInputTokens | |------|--------|-------------|-------------------| | `message_start` | `SetInputTokens(10)`, `SetCachedInputTokens(1)` | 10 ✅ | 1 ✅ | | `message_delta` (before fix) | `AddInputTokens(1)`, `AddCachedInputTokens(1)` | 11 ❌ | 2 ❌ | | `message_delta` (after fix) | Only `SetOutputTokens(16)` | 10 ✅ | 1 ✅ | ### Root Cause `ExtractTokenUsageFromExplicitCaching` computes `InputTokens = input_tokens + cache_read + cache_creation`. In `message_start`, this is correctly set via `Set*` methods. In `message_delta`, the same cumulative values were being added via `Add*` methods, causing double counting. ### Fix The `message_delta` handler now only updates output tokens using `SetOutputTokens`, since `message_start` typically reports `output_tokens=0` and `message_delta` provides the final count. This matches the pattern already used in `anthropic_anthropic.go`'s `reflectStreamingEvent`. The `MessageDeltaUsage` struct uses non-pointer `int64` fields that default to 0 when absent from JSON, making it impossible to distinguish "not provided" from "actually zero" — so we cannot safely `Set` override from delta either, as it would erase correct `message_start` values with zeros. ### Changes - `internal/translator/anthropic_helper.go`: Removed `Add*` calls for input/cache tokens from `message_delta` handler; replaced `AddOutputTokens` with `SetOutputTokens`; removed unused `ExtractTokenUsageFromExplicitCaching` call; added `>= 0` guard for `ThinkingTokens` - `internal/translator/anthropic_helper_test.go`: Added `TestAnthropicStreamParserTokenUsage_NoDoubleCounting` with 6 test cases ### Test Coverage - Cache tokens in both `message_start` and `message_delta` (core double-count scenario) - Cache creation tokens in both events - Both cache_read and cache_creation in both events - No cache tokens (baseline correctness) - Cache tokens only in `message_start`, not in `message_delta` - Cache tokens only in `message_delta` — verifies they are ignored (non-pointer int64 fields cannot distinguish absent from zero) --------- Signed-off-by: liuhy <liuhongyu@apache.org> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…ity (envoyproxy#2382) **Description** It should take a bit time to finalize the discussion and implementation of envoyproxy#2368, and it needs users to config on their side to adapt to this new feature. However, some users already used the newer claude models, so just update the claude models list for a temporal fix to unblock them. Signed-off-by: yxia216 <yxia216@bloomberg.net>
**Description** This commit preserves message-level `cache_control` fields on OpenAI tool result messages when translating requests to Anthropic-compatible backends. Previously, the OpenAI schema dropped the field before translation, so AWS Anthropic requests could not place a cache breakpoint on an outer `tool_result` block. The translator now prefers the message-level marker and falls back to the existing content-part marker. Unit tests cover string and multipart results, consecutive tool messages, and the compatibility path for content-part markers. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** I raised this PR because prompt caching worked for plain messages, tool definitions, and `tool_use` blocks, but missed when the breakpoint landed on a tool result through the OpenAI-compatible endpoint. The native Anthropic endpoint already preserved this shape. The E2E matrix checks all five prompt shapes against the in-cluster test upstream and verifies the exact AWS Anthropic request body. It does not call a live provider. I used Cursor to help investigate and implement this change, and I reviewed and verified the code and tests. Signed-off-by: John Panos <johncpanos@gmail.com>
…message_delta (envoyproxy#2292) **Description** Anthropic Messages streaming usage extraction reads input and cache token counts from `message_start`, and on `message_delta` it only updates `output_tokens`. Some Anthropic-compatable backends report the final `input_tokens`, `cache_creation_input_tokens` and `cache_read_input_tokens` on the `message_delta` event instead. In that case the input and cache counts get dropped and recorded as zero, which corrupts usage metrics and any downstream cost or quota accounting that depends on them. This runs the `message_delta` usage through the same `ExtractTokenUsageFromExplicitCaching` path already used for `message_start` and merges it with `Override`. The fields are only merged when non-zero, so a standard delta that carries `output_tokens` alone doesnt overwrite the `message_start` baseline with zeros. **Related Issues/PRs (if applicable)** Fixes envoyproxy#2290 **Special notes for reviewers (if applicable)** Added two streaming subtests (cache-creation and cache-read variants) using the values from the issue: `input_tokens` 4522 + cache 4511 gives 9033 input total and 9038 total. They fail on main and pass with this change. The existing streaming and non-streaming usage tests are untouched. --------- Signed-off-by: pjdurden <prajjwalchittori1@gmail.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
) **Description** This handles both route-level cluster names and per-backend cluster names generated by Envoy Gateway. Per-backend clusters now receive the upstream ext_proc and header mutation filters together with metadata for the specific backend reference, so priority-based fallback can apply the fallback backend's schema translation. The cluster-name parsing is isolated in a helper that validates the route rule and backend indexes. Existing route-level cluster behavior is preserved. **Related Issues/PRs (if applicable)** Fixes envoyproxy#2135 **Testing** - `go test ./internal/extensionserver -run 'TestParseAIGatewayClusterName|TestMaybeModifyClusterPerBackendClusterName|Test_maybeModifyCluster' -count=1` - `go test ./internal/extensionserver -count=1` - `go test ./internal/extensionserver -coverprofile=<temp-file> -count=1` (package 88.3%; parser and endpoint metadata helper 100%) - `go vet ./internal/extensionserver` - `git diff --check` The repository's `go tool -modfile=tools/go.mod` lint command is not compatible with the local Go 1.26 tool invocation, so the extension server lint target was not run. **Special notes for reviewers (if applicable)** The regression tests cover both per-backend LoadAssignment metadata and the EDS-managed cluster-level metadata fallback. This update was prepared with OpenAI Codex assistance and reviewed against the current extension server implementation. --------- Signed-off-by: Yang Haoran <97868579@qq.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…i models (envoyproxy#2259) **Description** The previous implementation on tokens tracking is like ``` if chunk.UsageMetadata.CandidatesTokenCount >= 0 { tokenUsage.SetOutputTokens(uint32(chunk.UsageMetadata.CandidatesTokenCount)) //nolint:gosec } ``` The output tokens should include both the reasoning tokens and the candidates tokens. Thus fix this by reusing the the variable `usage`, just like non-streaming mode. Also updated the tests to include reasoning tokens --------- Signed-off-by: yxia216 <yxia216@bloomberg.net> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…hought_signature_validator for Gemini function calls (envoyproxy#2366) **Description** Gemini 3.x requires the thought signature (see [1]) returned with a `functionCall` to be echoed back on that part in subsequent requests; otherwise Vertex rejects the request with `400 INVALID_ARGUMENT` ("Function call is missing a thought_signature in functionCall parts"). The OpenAI → GCPVertexAI translator emits the signature in responses as `message.thinking_blocks[].signature` (envoyproxy#1995) but on the request side only reads it from assistant `content` parts of type `"thinking"` (envoyproxy#1726), and sends nothing when absent. Standard OpenAI-schema clients have no signature field to echo, so every tool round-trip with Gemini 3.x fails. This PR changes `assistantMsgToGeminiParts` to: - also accept a signature echoed via the assistant message's `thinking_blocks[].signature` — the same shape the gateway itself emits, so round-tripping the response message now works. Content-part signatures keep priority. - fall back to Google's documented compatibility value `skip_thought_signature_validator` on the first `functionCall` part when the client echoed no signature at all (matching LiteLLM's behavior). Attached to the first part only, consistent with how Gemini attaches signatures for parallel calls. `ChatCompletionAssistantMessageParam` gains the `thinking_blocks` field to make the request/response contract symmetric. **Related Issues/PRs (if applicable)** Fixes envoyproxy#2365 Related PRs: envoyproxy#1726, envoyproxy#1995 **Special notes for reviewers (if applicable)** - Four pre-existing fixtures in `gemini_helper_test.go` / `TestOpenAIMessagesToGeminiContents` exercised tool calls without a signature and now expect the dummy value — that's the intended new behavior, not weakened assertions. - Verified end-to-end with `aigw run` against real Vertex (`gemini-3.5-flash`, `eu`): the signature-less round-trip returns 200 with this patch and 400 on `main`; `thinking_blocks` echo returns 200 and carries the real signature; streaming unaffected. Vertex accepts the dummy value (documented compatibility path, so no hard dependency on Google keeping undocumented behavior). 1: https://ai.google.dev/gemini-api/docs/thought-signatures --------- Signed-off-by: Adam Nych <adam.nych@univio.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…wer gemini models like gemini-3.5-flash (envoyproxy#2399) **Description** ***Problem*** When the model returns a tool call, OpenAI expects the finish reason to be `tool_calls` while Gemini returns `STOP`. We convert it via ``` if len(toolCalls) > 0 { return openai.ChatCompletionChoicesFinishReasonToolCalls } ``` This was correct for streaming mode because the finish reason and the tool calls are in the same chunk in the previous Gemini models. However, for newer Gemini models like gemini-3.5-flash, they are split into **two** chunks. The `functionCall` chunk has **no** `finishReason`, and a **trailing** chunk carries `finishReason: STOP` with an empty text part and **no** `functionCall`: ```jsonc // raw GCP chunk 1 — has the tool call, no finishReason {"candidates":[{"content":{"parts":[{"functionCall":{"name":"get_current_weather","args":{"...":"..."}}, "thoughtSignature":"..."}]}}], "usageMetadata":{"trafficType":"ON_DEMAND"}} // raw GCP chunk 2 — terminal STOP, empty text, no functionCall {"candidates":[{"content":{"parts":[{"text":""}]},"finishReason":"STOP"}], "usageMetadata":{"promptTokenCount":107,"candidatesTokenCount":31,"thoughtsTokenCount":148,"...":"..."}} ``` In this case, the conversion would be invalid. Thus, we need to remember whether the model returned a tool call during the streaming mode. --------- Signed-off-by: yxia216 <yxia216@bloomberg.net>
📝 WalkthroughWalkthrough이번 변경은 임베딩 요청 스키마와 Vertex AI ChangesPlatform and documentation
Embedding flow
Controller and request processing
Extension and provider translation
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
internal/controller/mcp_route.go (1)
745-762: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win이전 Secret 삭제를 필터 Update 성공 이후로 옮기는 편이 안전합니다.
현재는 Delete를 먼저 수행하므로, 이어지는
Update가 실패하면 필터가 이미 삭제된 Secret을 계속 참조해 크리덴셜 주입이 깨진 상태로 남습니다(다음 리컨실까지).♻️ 제안 순서 변경
- if previousCredentialSecretName != "" && previousCredentialSecretName != credentialSecretName { - deleteErr := c.kube.CoreV1().Secrets(mcpRoute.Namespace).Delete(ctx, previousCredentialSecretName, metav1.DeleteOptions{}) - if deleteErr != nil && !apierrors.IsNotFound(deleteErr) { - return fmt.Errorf("failed to delete stale credential secret %s: %w", previousCredentialSecretName, deleteErr) - } - } - // Update existing filter unconditionally to ensure it matches the desired state. existingFilter.Spec = filter.Spec c.logger.Info("Updating HTTPRouteFilter", "namespace", existingFilter.Namespace, "name", existingFilter.Name) if err = c.client.Update(ctx, &existingFilter); err != nil { return fmt.Errorf("failed to update HTTPRouteFilter: %w", err) } + if previousCredentialSecretName != "" && previousCredentialSecretName != credentialSecretName { + deleteErr := c.kube.CoreV1().Secrets(mcpRoute.Namespace).Delete(ctx, previousCredentialSecretName, metav1.DeleteOptions{}) + if deleteErr != nil && !apierrors.IsNotFound(deleteErr) { + return fmt.Errorf("failed to delete stale credential secret %s: %w", previousCredentialSecretName, deleteErr) + } + }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/controller/mcp_route.go` around lines 745 - 762, Move the stale credential Secret deletion from before the HTTPRouteFilter update to after a successful `c.client.Update` in the existing filter reconciliation flow. Preserve the current transition check and NotFound handling, and return the same wrapped error if deletion fails; if the update fails, return immediately without deleting the previous Secret.internal/extproc/processor_impl.go (1)
513-565: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftAUTH용 바디를 별도로 전달하세요
wantBodyReplace=false여도h.Do(ctx, u.requestHeaders, bodyMutation.GetBody())는 그대로 호출되는데, 이때 전달되는 값은 빈 바디입니다. Envoy는 실제 요청 본문을 유지하므로, 본문 해시에 의존하는 인증 핸들러는 잘못된 서명/인증 헤더를 만들 수 있습니다. 바디를 교체하지 않더라도 auth 계산용 본문은 현재 요청 본문 기준으로 넘겨야 합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/extproc/processor_impl.go` around lines 513 - 565, When invoking the auth handler h.Do, pass the current request body for authentication even when wantBodyReplace is false, instead of always using bodyMutation.GetBody(), which may be empty. Preserve bodyMutation.GetBody() for replacement cases and ensure the handler receives the actual current request body used by Envoy for hash/signature calculations.
🧹 Nitpick comments (13)
internal/controller/mcp_route.go (1)
798-817: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win기존 Secret 업데이트 경로에서 ownerReference를 보정하지 않습니다.
desired에만 controller reference를 설정하고 업데이트는existing.Data만 교체하므로, 동일 이름의 Secret이 이미 다른 소유자(또는 소유자 없이) 존재하면 소유권 없이 내용만 덮어쓰게 되고 MCPRoute 삭제 시 GC 대상에서 누락됩니다.♻️ 제안 수정
if string(existing.Data[egv1a1.InjectedCredentialKey]) != credentialValue { existing.Data = desired.Data + existing.OwnerReferences = desired.OwnerReferences c.logger.Info("Updating credential secret", "namespace", mcpRoute.Namespace, "name", secretName)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/controller/mcp_route.go` around lines 798 - 817, Update the existing Secret path in the credential reconciliation logic to also synchronize its ownerReferences from desired, not only existing.Data. Ensure the controller reference is applied when updating an already-present Secret, while preserving the current update condition and error handling.internal/controller/gateway_test.go (1)
2841-2867: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
envoyGatewayNamespace가 빈 문자열인 케이스 테스트 추가를 권장합니다.
gateway.go에서 지적한 빈 값 폴백 동작이 회귀 테스트로 고정되지 않습니다.NewGatewayController(..., "", ...)케이스를 추가하면 가드 수정 후 동작이 보장됩니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/controller/gateway_test.go` around lines 2841 - 2867, Extend TestGatewayController_getObjectsForGatewaySameNamespace with a case that constructs NewGatewayController using an empty envoyGatewayNamespace, then verifies getObjectsForGateway still resolves the gateway’s namespace and returns its matching pod and deployment. Preserve the existing non-empty namespace assertions and use the same gateway-scoped test resources to lock in the fallback behavior.internal/controller/mcp_route_test.go (1)
318-331: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
expCredentialHeader가 어떤 케이스에서도 설정되지 않아 사실상 검증되지 않습니다.secretRef + 커스텀 헤더(
Header: ptr.To("X-API-KEY")) 케이스를 추가하면CredentialInjection.Header전달과 "Bearer" 미적용 동작이 함께 고정됩니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/controller/mcp_route_test.go` around lines 318 - 331, Update the MCP backend API key test cases to add a SecretRef configuration with Header set to ptr.To("X-API-KEY"), and set expCredentialHeader to that custom header while expecting the secret value without a "Bearer " prefix. Ensure the case validates CredentialInjection.Header propagation and the custom-header behavior.internal/extensionserver/post_translate_modify.go (1)
865-904: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
setEndpointMetadataBackendName과setClusterMetadataBackendName의 코드 중복.두 함수는 대상 타입(
*clusterv3.Clustervs*endpointv3.LbEndpoint)만 다를 뿐 메타데이터 초기화 및 필드 설정 로직이 완전히 동일합니다.internal/extensionserver/inferencepool.go에서 이미 적용한 것처럼(*corev3.Metadata를 직접 받는 공통 헬퍼 + 호출부에서 사전 초기화) 공통 함수로 추출하면 중복을 줄일 수 있습니다.♻️ 리팩터링 제안
-func setClusterMetadataBackendName(cluster *clusterv3.Cluster, namespace, name, routeName string, routeRuleIndex, refIndex int) { - if cluster.Metadata == nil { - cluster.Metadata = &corev3.Metadata{} - } - if cluster.Metadata.FilterMetadata == nil { - cluster.Metadata.FilterMetadata = make(map[string]*structpb.Struct) - } - m, ok := cluster.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] - if !ok { - m = &structpb.Struct{} - cluster.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] = m - } - if m.Fields == nil { - m.Fields = make(map[string]*structpb.Value) - } - m.Fields[internalapi.InternalMetadataBackendNameKey] = structpb.NewStringValue( - internalapi.PerRouteRuleRefBackendName(namespace, name, routeName, routeRuleIndex, refIndex), - ) -} - -func setEndpointMetadataBackendName(endpoint *endpointv3.LbEndpoint, namespace, name, routeName string, routeRuleIndex, refIndex int) { - if endpoint.Metadata == nil { - endpoint.Metadata = &corev3.Metadata{} - } - if endpoint.Metadata.FilterMetadata == nil { - endpoint.Metadata.FilterMetadata = make(map[string]*structpb.Struct) - } - m, ok := endpoint.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] - if !ok { - m = &structpb.Struct{} - endpoint.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] = m - } - if m.Fields == nil { - m.Fields = make(map[string]*structpb.Value) - } - m.Fields[internalapi.InternalMetadataBackendNameKey] = structpb.NewStringValue( - internalapi.PerRouteRuleRefBackendName(namespace, name, routeName, routeRuleIndex, refIndex), - ) -} +func setBackendNameMetadata(metadata *corev3.Metadata, namespace, name, routeName string, routeRuleIndex, refIndex int) *corev3.Metadata { + if metadata == nil { + metadata = &corev3.Metadata{} + } + if metadata.FilterMetadata == nil { + metadata.FilterMetadata = make(map[string]*structpb.Struct) + } + m, ok := metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] + if !ok { + m = &structpb.Struct{} + metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] = m + } + if m.Fields == nil { + m.Fields = make(map[string]*structpb.Value) + } + m.Fields[internalapi.InternalMetadataBackendNameKey] = structpb.NewStringValue( + internalapi.PerRouteRuleRefBackendName(namespace, name, routeName, routeRuleIndex, refIndex), + ) + return metadata +} + +func setClusterMetadataBackendName(cluster *clusterv3.Cluster, namespace, name, routeName string, routeRuleIndex, refIndex int) { + cluster.Metadata = setBackendNameMetadata(cluster.Metadata, namespace, name, routeName, routeRuleIndex, refIndex) +} + +func setEndpointMetadataBackendName(endpoint *endpointv3.LbEndpoint, namespace, name, routeName string, routeRuleIndex, refIndex int) { + endpoint.Metadata = setBackendNameMetadata(endpoint.Metadata, namespace, name, routeName, routeRuleIndex, refIndex) +}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/extensionserver/post_translate_modify.go` around lines 865 - 904, Extract the duplicated metadata initialization and backend-name field assignment from setClusterMetadataBackendName and setEndpointMetadataBackendName into a shared helper accepting *corev3.Metadata. Have each caller initialize its target Metadata when needed, then pass it to the helper while preserving the existing namespace, key, and PerRouteRuleRefBackendName values.tests/e2e/testupstream_test.go (1)
316-324: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win동일 manifest를 두 테스트가 각각 apply/delete 하면서 서로의 리소스를 정리합니다.
TestWithTestUpstream도 같은testdata/testupstream.yaml을 apply하고 Cleanup에서 전체 삭제합니다. 이 테스트가 뒤에 실행되면 방금 삭제된 Gateway/EnvoyProxy를 다시 만들며 파드 재기동을 기다려야 하고, 반대 순서라면 앞선 테스트의 Cleanup이 이 테스트의 리소스까지 지웁니다. 또한RequireWaitForGatewayPodReady가 Terminating 상태의 이전 파드를 ready로 판정할 여지가 있어 플레이키 가능성이 있습니다.manifest를
TestMain/공유 setup으로 한 번만 적용하거나, 이 테스트를TestWithTestUpstream의 서브테스트로 편입하는 편이 안전합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/e2e/testupstream_test.go` around lines 316 - 324, Remove the per-test manifest lifecycle from TestPromptCacheTranslationMatrix: share a single setup/cleanup with TestWithTestUpstream, preferably by applying testdata/testupstream.yaml once in TestMain or shared setup, or by making this test a subtest of TestWithTestUpstream. Ensure both tests reuse the same resources and cleanup occurs only after both complete, while retaining the gateway readiness check.internal/translator/anthropic_helper.go (1)
849-908: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value동일 이벤트를 다시
unmarshal하지 말고 SDK의JSON.*.Valid()presence 메타데이터로 통일하세요.message_delta를 별도 익명 구조체로 한 번 더 파싱하기보다,input_tokens/캐시 토큰의 존재 여부를 SDK가 제공하는 필드 메타데이터로 처리하면 중복 로직을 줄일 수 있습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/translator/anthropic_helper.go` around lines 849 - 908, Update updateInputUsageFromMessageDelta to reuse the already parsed SDK message_delta event instead of unmarshalling data into messageDeltaUsageFields again. Determine presence of input_tokens, cache_read_input_tokens, and cache_creation_input_tokens through each SDK JSON field’s Valid() metadata, while preserving the existing cumulative Set behavior and fallback handling for absent values.internal/translator/openai_openai.go (1)
147-157: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win근본 원인은
Decode에 이중 포인터를 넘긴 것입니다.
resp가 이미 포인터이므로Decode(resp)로 넘기면 JSONnull은 no-op이 되어 nil이 될 수 없고, 별도 가드가 불필요합니다. 증상 방어보다 호출 자체를 고치는 편이 명확합니다.♻️ 제안 리팩터
resp := &openai.ChatCompletionResponse{} - if err := json.NewDecoder(body).Decode(&resp); err != nil { + // Pass resp (not &resp): a JSON `null` body is then a no-op instead of + // nilling out the pointer. + if err := json.NewDecoder(body).Decode(resp); err != nil { return nil, nil, tokenUsage, responseModel, fmt.Errorf("failed to unmarshal body: %w", err) } - // A JSON `null` body decodes into a nil *resp without an error (the decode - // target is a **ChatCompletionResponse), which some upstreams return with a - // 200 status. Treat it as an empty response so we report zero usage and fall - // back to the request model, mirroring the streaming path, instead of - // dereferencing nil below. - if resp == nil { - resp = &openai.ChatCompletionResponse{} - }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/translator/openai_openai.go` around lines 147 - 157, Update the response decoding in the relevant OpenAI translation flow to pass the existing response pointer directly to json.Decoder.Decode instead of a pointer to that pointer. Remove the now-unnecessary resp == nil fallback block, while preserving the existing decode error handling and subsequent response processing.internal/translator/openai_gcpvertexai.go (1)
453-471: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value다중 candidate 스트림에서
streamedToolCall이 candidate 간 공유됩니다.
n > 1(다중 candidate) 응답에서 candidate 0이 tool call을 스트리밍하면 candidate 1의 정상stop도tool_calls로 바뀝니다. Gemini에서 흔한 경로는 아니지만, candidate index별로 플래그를 관리하는 편이 정확합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/translator/openai_gcpvertexai.go` around lines 453 - 471, Update the streamed tool-call tracking in the candidate conversion flow so each candidate maintains its own flag instead of sharing `o.streamedToolCall`. Use the current candidate index when recording tool calls and when converting a terminal `stop` to `tool_calls`, preserving independent finish reasons for multi-candidate streams.internal/apischema/openai/openai.go (1)
1778-1826: 🗄️ Data Integrity & Integration | 🔵 Trivial | 🏗️ Heavy lift
EmbeddingRequest의 필드 중복으로 인한 잠재적 데이터 불일치 위험최상위
EmbeddingBaseRequest와OfCompletion/OfChat내부의EmbeddingBaseRequest가 서로 독립된 복사본입니다.UnmarshalJSON경로에서는 항상 동기화되지만,MarshalJSON은 최상위 필드를 전혀 사용하지 않고 활성 변형(OfChat/OfCompletion)만 직렬화합니다. 반대로internal/tracing/openinference/openai/request_attrs.go의buildEmbeddingsRequestAttributes는embRequest.Model/EncodingFormat/Dimensions/User등 최상위 필드만 읽습니다. 즉 두 값의 역할이 반대이며, 이는 이번 PR의 테스트 픽스처들(embeddings_test.go,embeddings_requests.go,tracing_test.go)이 모두 동일 값을 두 곳에 수동으로 중복 기입해야 하는 이유이기도 합니다. 향후 한쪽만 갱신하면 트레이싱 속성이 stale한 값을 담거나 직렬화된 요청 바디와 어긋날 수 있습니다.접근자 메서드(
func (r *EmbeddingRequest) GetModel() string등)로 활성 변형에서 값을 읽도록 캡슐화하고 최상위 중복 필드를 제거하는 것을 권장합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/apischema/openai/openai.go` around lines 1778 - 1826, EmbeddingRequest duplicates EmbeddingBaseRequest and allows tracing attributes to diverge from the serialized variant. Remove the promoted top-level EmbeddingBaseRequest, update UnmarshalJSON and MarshalJSON to rely solely on OfCompletion or OfChat, and add accessor methods such as GetModel, GetEncodingFormat, GetDimensions, and GetUser that read from the active variant; update buildEmbeddingsRequestAttributes and affected fixtures to use these accessors.internal/translator/openai_gcpvertexai_embeddings.go (2)
173-189: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value동일 에러를 반환하는 두 case를 병합할 수 있습니다.
openai.EmbeddingInputItem과[]openai.EmbeddingInputItemcase의 반환 문자열이 완전히 동일하므로case A, B:로 합치면 중복이 사라집니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/translator/openai_gcpvertexai_embeddings.go` around lines 173 - 189, Merge the openai.EmbeddingInputItem and []openai.EmbeddingInputItem branches in collectInputTexts into a single combined case, preserving the existing identical error response and behavior.
114-118: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value오류 메시지가 실제 원인과 어긋날 수 있습니다.
openAIEmbeddingToGeminiMessage는 predict 경로에서만 호출되고, 호출 지점(라인 309-311)에서 이미OfChat != nil을 걸러냅니다. 따라서 여기 도달하는OfCompletion == nil은 사실상 "input도 messages도 없는" 요청인데, 메시지는 멀티모달 미지원을 언급해 진단을 흐립니다.embedding request must have either input or messages계열로 문구를 맞추는 것이 정확합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/translator/openai_gcpvertexai_embeddings.go` around lines 114 - 118, Update the nil-check in openAIEmbeddingToGeminiMessage so its error message accurately states that the embedding request must provide either input or messages, instead of mentioning unsupported multimodal messages. Preserve the existing ErrInvalidRequestBody wrapping and model context.internal/translator/openai_gcpvertexai_embeddings_test.go (2)
190-218: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win글로벌 vendor
title케이스 커버리지가 없습니다.vendor 필드
TaskType오버라이드 케이스는 있으나Title오버라이드 케이스는 없습니다.openai_gcpvertexai_embeddings.go라인 148-153에서 지적한 title 적용 규칙(RETRIEVAL_DOCUMENT 제약)을 고정하려면 predict 경로에 대해Title+ 비-RETRIEVAL_DOCUMENT task type 조합 테스트를 추가해 주세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/translator/openai_gcpvertexai_embeddings_test.go` around lines 190 - 218, Extend the predict-path test cases around the existing global TaskType override scenario to cover global vendor Title behavior. Add a case where Title is set globally and the effective task type is not RETRIEVAL_DOCUMENT, asserting the generated request includes the expected title according to the title application rule; also preserve coverage that titles are constrained to RETRIEVAL_DOCUMENT as implemented in the embedding translation flow.
595-598: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win에러 케이스에서 오류 분류까지 검증하면 좋겠습니다.
wantError케이스가require.Error만 확인하므로, 번역기가internalapi.ErrInvalidRequestBody로 래핑하는지(= 4xx로 매핑되는지)는 검증되지 않습니다.require.ErrorIs(t, err, internalapi.ErrInvalidRequestBody)를 옵션 플래그로 추가하면 상태 코드 회귀를 잡을 수 있습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/translator/openai_gcpvertexai_embeddings_test.go` around lines 595 - 598, Extend the wantError handling in the embedding translator test to optionally assert that the error wraps internalapi.ErrInvalidRequestBody using require.ErrorIs, while preserving cases that only require an error. Add and apply a test-case flag for this classification check so 4xx mapping regressions are covered.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@internal/controller/mcp_route.go`:
- Around line 596-604: URL 쿼리 파라미터를 구성하는 `fullPathPtr` 업데이트에서 `apiKeyLiteral`을
삽입하기 전에 `url.QueryEscape`로 인코딩하세요. `apiKey.QueryParam` 이름과 기존 경로·오류 처리 흐름은 유지하고,
Secret 평문을 HTTPRoute 매니페스트에 기록하는 기존 TODO는 별도 이슈 추적 대상으로 남겨두세요.
In `@internal/controller/referencegrant.go`:
- Around line 162-173: Update referenceGrantValidator.matchesTo to accept the
target resource name and, after validating group and kind, reject grants whose
to.Name is set unless it matches that target name; preserve wildcard behavior
when to.Name is unset, and update all callers to pass the referenced resource
name.
In `@internal/tracing/openinference/anthropic/messages.go`:
- Around line 273-277: Apply the same shared index validation used for
ContentBlockStart.Index to every SSE index path, including
ContentBlockDelta.Index and ContentBlockStop.Index, so negative and unreasonably
large values are skipped before indexing response.Content. Add a regression test
covering a negative delta index and verifying no panic occurs.
In `@internal/translator/anthropic_anthropic.go`:
- Around line 186-217: Validate all provider token counts against the uint32
range before conversions in the streaming usage update block, including
OutputTokens and each input/cache field; reject, error, or safely clamp
out-of-range values rather than wrapping. Also guard the rawInput + cacheRead +
cacheCreation sum against uint32 overflow before passing it to SetInputTokens,
while preserving valid usage updates in the surrounding streaming token
handling.
In `@internal/translator/anthropic_awsbedrock_test.go`:
- Around line 1561-1574: The subtest name and assertion in “system message is
added to existing system param” describe conflicting behavior. After fixing
promoteAnthropicSystemMessagesToParam to preserve and combine the existing
System prompt with promoted system messages, update this test’s expected
System.Text assertion to verify both values rather than the overwritten value.
In `@internal/translator/anthropic_awsbedrock.go`:
- Around line 184-188: Update promoteAnthropicSystemMessagesToParam in
internal/translator/anthropic_awsbedrock.go:184-188 to preserve existing
body.System text and append the promoted system text instead of replacing it.
Update the related assertions, subtest name, and comments in
internal/translator/anthropic_awsbedrock_test.go:1561-1574 to expect the merged
result.
In `@internal/translator/anthropic_helper.go`:
- Around line 1051-1052: Update the comment near the message_start token
handling to reflect that message_delta also supplies input_tokens and cache
token counts, as implemented in the message_delta handling around the relevant
token update logic; remove the inaccurate statement that only output_tokens is
used from message_delta.
- Around line 624-659: Update the outputConfigModels list used by
outputConfigAvailable to include the opus-5 model identifier, while leaving
modelContainsAny substring matching and the effortModels list unchanged.
In `@internal/translator/openai_gcpvertexai_embeddings_test.go`:
- Line 482: Update the wantBodyNotContain assertions in the data URI test to use
the serialized key "fileUri" instead of "fileURI", ensuring the test actually
verifies that no file URI field is generated.
In `@internal/translator/openai_gcpvertexai_embeddings.go`:
- Around line 148-153: Update the global title application in the
instance-building flow to set Title only when the request task type is
RETRIEVAL_DOCUMENT, matching the existing per-item handling. Preserve the
current iteration and empty-title guard, and prevent titles from being added for
other task types such as SEMANTIC_SIMILARITY.
---
Outside diff comments:
In `@internal/controller/mcp_route.go`:
- Around line 745-762: Move the stale credential Secret deletion from before the
HTTPRouteFilter update to after a successful `c.client.Update` in the existing
filter reconciliation flow. Preserve the current transition check and NotFound
handling, and return the same wrapped error if deletion fails; if the update
fails, return immediately without deleting the previous Secret.
In `@internal/extproc/processor_impl.go`:
- Around line 513-565: When invoking the auth handler h.Do, pass the current
request body for authentication even when wantBodyReplace is false, instead of
always using bodyMutation.GetBody(), which may be empty. Preserve
bodyMutation.GetBody() for replacement cases and ensure the handler receives the
actual current request body used by Envoy for hash/signature calculations.
---
Nitpick comments:
In `@internal/apischema/openai/openai.go`:
- Around line 1778-1826: EmbeddingRequest duplicates EmbeddingBaseRequest and
allows tracing attributes to diverge from the serialized variant. Remove the
promoted top-level EmbeddingBaseRequest, update UnmarshalJSON and MarshalJSON to
rely solely on OfCompletion or OfChat, and add accessor methods such as
GetModel, GetEncodingFormat, GetDimensions, and GetUser that read from the
active variant; update buildEmbeddingsRequestAttributes and affected fixtures to
use these accessors.
In `@internal/controller/gateway_test.go`:
- Around line 2841-2867: Extend
TestGatewayController_getObjectsForGatewaySameNamespace with a case that
constructs NewGatewayController using an empty envoyGatewayNamespace, then
verifies getObjectsForGateway still resolves the gateway’s namespace and returns
its matching pod and deployment. Preserve the existing non-empty namespace
assertions and use the same gateway-scoped test resources to lock in the
fallback behavior.
In `@internal/controller/mcp_route_test.go`:
- Around line 318-331: Update the MCP backend API key test cases to add a
SecretRef configuration with Header set to ptr.To("X-API-KEY"), and set
expCredentialHeader to that custom header while expecting the secret value
without a "Bearer " prefix. Ensure the case validates CredentialInjection.Header
propagation and the custom-header behavior.
In `@internal/controller/mcp_route.go`:
- Around line 798-817: Update the existing Secret path in the credential
reconciliation logic to also synchronize its ownerReferences from desired, not
only existing.Data. Ensure the controller reference is applied when updating an
already-present Secret, while preserving the current update condition and error
handling.
In `@internal/extensionserver/post_translate_modify.go`:
- Around line 865-904: Extract the duplicated metadata initialization and
backend-name field assignment from setClusterMetadataBackendName and
setEndpointMetadataBackendName into a shared helper accepting *corev3.Metadata.
Have each caller initialize its target Metadata when needed, then pass it to the
helper while preserving the existing namespace, key, and
PerRouteRuleRefBackendName values.
In `@internal/translator/anthropic_helper.go`:
- Around line 849-908: Update updateInputUsageFromMessageDelta to reuse the
already parsed SDK message_delta event instead of unmarshalling data into
messageDeltaUsageFields again. Determine presence of input_tokens,
cache_read_input_tokens, and cache_creation_input_tokens through each SDK JSON
field’s Valid() metadata, while preserving the existing cumulative Set behavior
and fallback handling for absent values.
In `@internal/translator/openai_gcpvertexai_embeddings_test.go`:
- Around line 190-218: Extend the predict-path test cases around the existing
global TaskType override scenario to cover global vendor Title behavior. Add a
case where Title is set globally and the effective task type is not
RETRIEVAL_DOCUMENT, asserting the generated request includes the expected title
according to the title application rule; also preserve coverage that titles are
constrained to RETRIEVAL_DOCUMENT as implemented in the embedding translation
flow.
- Around line 595-598: Extend the wantError handling in the embedding translator
test to optionally assert that the error wraps internalapi.ErrInvalidRequestBody
using require.ErrorIs, while preserving cases that only require an error. Add
and apply a test-case flag for this classification check so 4xx mapping
regressions are covered.
In `@internal/translator/openai_gcpvertexai_embeddings.go`:
- Around line 173-189: Merge the openai.EmbeddingInputItem and
[]openai.EmbeddingInputItem branches in collectInputTexts into a single combined
case, preserving the existing identical error response and behavior.
- Around line 114-118: Update the nil-check in openAIEmbeddingToGeminiMessage so
its error message accurately states that the embedding request must provide
either input or messages, instead of mentioning unsupported multimodal messages.
Preserve the existing ErrInvalidRequestBody wrapping and model context.
In `@internal/translator/openai_gcpvertexai.go`:
- Around line 453-471: Update the streamed tool-call tracking in the candidate
conversion flow so each candidate maintains its own flag instead of sharing
`o.streamedToolCall`. Use the current candidate index when recording tool calls
and when converting a terminal `stop` to `tool_calls`, preserving independent
finish reasons for multi-candidate streams.
In `@internal/translator/openai_openai.go`:
- Around line 147-157: Update the response decoding in the relevant OpenAI
translation flow to pass the existing response pointer directly to
json.Decoder.Decode instead of a pointer to that pointer. Remove the
now-unnecessary resp == nil fallback block, while preserving the existing decode
error handling and subsequent response processing.
In `@tests/e2e/testupstream_test.go`:
- Around line 316-324: Remove the per-test manifest lifecycle from
TestPromptCacheTranslationMatrix: share a single setup/cleanup with
TestWithTestUpstream, preferably by applying testdata/testupstream.yaml once in
TestMain or shared setup, or by making this test a subtest of
TestWithTestUpstream. Ensure both tests reuse the same resources and cleanup
occurs only after both complete, while retaining the gateway readiness check.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 277690ab-dc0d-4f7e-885c-a0a09cd7a36d
⛔ Files ignored due to path filters (4)
go.sumis excluded by!**/*.sumsite/package-lock.jsonis excluded by!**/package-lock.jsonsite/static/img/adopters/stacklok.pngis excluded by!**/*.pngtools/go.sumis excluded by!**/*.sum
📒 Files selected for processing (97)
.github/workflows/build_and_test.yaml.github/workflows/codeql.yaml.github/workflows/docker_build_job.yaml.github/workflows/release.yaml.gitignoreRELEASES.mdSECURITY.mdapi/v1alpha1/quota_policy.goapi/v1beta1/mcp_route.gocmd/aigw/translate.gocmd/controller/main.gocmd/controller/main_test.gogo.modinternal/apischema/gcp/gcp.gointernal/apischema/openai/openai.gointernal/apischema/openai/vendor_fields_test.gointernal/bodymutator/body_mutator.gointernal/controller/ai_gateway_route.gointernal/controller/ai_gateway_route_test.gointernal/controller/controller.gointernal/controller/gateway.gointernal/controller/gateway_test.gointernal/controller/mcp_route.gointernal/controller/mcp_route_test.gointernal/controller/referencegrant.gointernal/controller/referencegrant_test.gointernal/endpointspec/endpointspec_test.gointernal/extensionserver/extensionserver_test.gointernal/extensionserver/inferencepool.gointernal/extensionserver/post_translate_modify.gointernal/extensionserver/post_translate_modify_test.gointernal/extproc/processor_impl.gointernal/extproc/processor_impl_test.gointernal/extproc/util.gointernal/extproc/util_test.gointernal/filterapi/filterconfig.gointernal/filterapi/filterconfig_test.gointernal/internalapi/internalapi.gointernal/mcpproxy/config.gointernal/mcpproxy/handlers.gointernal/mcpproxy/handlers_test.gointernal/mcpproxy/mcpproxy.gointernal/mcpproxy/mcpproxy_test.gointernal/pprof/pprof.gointernal/tracing/openinference/anthropic/messages.gointernal/tracing/openinference/anthropic/messages_test.gointernal/tracing/openinference/openai/embeddings_test.gointernal/tracing/openinference/openai/request_attrs.gointernal/tracing/tracing_test.gointernal/translator/anthropic_anthropic.gointernal/translator/anthropic_anthropic_test.gointernal/translator/anthropic_awsbedrock.gointernal/translator/anthropic_awsbedrock_test.gointernal/translator/anthropic_helper.gointernal/translator/anthropic_helper_test.gointernal/translator/anthropic_openai_test.gointernal/translator/gemini_helper.gointernal/translator/gemini_helper_test.gointernal/translator/openai_awsanthropic_test.gointernal/translator/openai_awsbedrock.gointernal/translator/openai_awsbedrock_embeddings.gointernal/translator/openai_awsbedrock_embeddings_test.gointernal/translator/openai_awsbedrock_test.gointernal/translator/openai_gcpanthropic_test.gointernal/translator/openai_gcpvertexai.gointernal/translator/openai_gcpvertexai_embeddings.gointernal/translator/openai_gcpvertexai_embeddings_test.gointernal/translator/openai_gcpvertexai_test.gointernal/translator/openai_openai.gointernal/translator/openai_openai_test.gomanifests/charts/ai-gateway-crds-helm/templates/aigateway.envoyproxy.io_mcproutes.yamlmanifests/charts/ai-gateway-crds-helm/templates/aigateway.envoyproxy.io_quotapolicies.yamlmanifests/charts/ai-gateway-helm/templates/_helpers.tplmanifests/charts/ai-gateway-helm/templates/deployment.yamlmanifests/charts/ai-gateway-helm/templates/envoy_gateway_cluster_role_for_inference_pool.yamlmanifests/charts/ai-gateway-helm/templates/serviceaccount.yamlsite/blog/authors.ymlsite/docs/_vars.jsonsite/docs/api/api.mdxsite/docs/capabilities/index.mdsite/docs/capabilities/traffic/index.mdsite/docs/capabilities/traffic/quota-policy.mdsite/docs/capabilities/traffic/usage-based-ratelimiting.mdsite/docs/compatibility.mdsite/docusaurus.config.tssite/package.jsonsite/src/components/HomepageFeatures/index.tsxsite/src/data/adopters/adopters.jsonsite/src/data/talks.jsonsite/versioned_docs/version-0.7/_vars.jsonsite/versioned_docs/version-0.7/compatibility.mdtests/data-plane/testupstream_test.gotests/e2e/testdata/testupstream.yamltests/e2e/testupstream_test.gotests/internal/testopenai/embeddings_requests.gotests/internal/testopenai/openai_test.gotools/go.mod
| case apiKey.QueryParam != nil: | ||
| // Query parameter injection cannot use Envoy Gateway's credentialInjection filter; | ||
| // embed directly in the URL rewrite path. | ||
| // TODO: evaluate alternatives to avoid embedding the secret in the HTTPRoute manifest. | ||
| apiKeyLiteral, err := c.readAPIKey(ctx, mcpRoute.Namespace, apiKey) | ||
| if err != nil { | ||
| return gwapiv1.HTTPRouteRule{}, fmt.Errorf("failed to read API key for backend %s: %w", ref.Name, err) | ||
| } | ||
| fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr, *apiKey.QueryParam, apiKeyLiteral) |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
쿼리 파라미터에 API 키를 URL 인코딩 없이 삽입합니다.
apiKeyLiteral에 &, =, #, 공백 등이 포함되면 rewrite된 경로가 깨지거나 의도치 않은 추가 파라미터로 해석됩니다. 최소한 url.QueryEscape를 적용해야 합니다. 아울러 SecretRef + QueryParam 조합에서는 Secret 평문이 HTTPRoute 매니페스트에 그대로 기록되므로, 기존 TODO를 이슈로 트래킹하는 것을 권합니다.
🐛 제안 수정
- fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr, *apiKey.QueryParam, apiKeyLiteral)
+ fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr,
+ url.QueryEscape(*apiKey.QueryParam), url.QueryEscape(apiKeyLiteral))원하시면 TODO 추적용 이슈를 대신 생성해 드릴까요?
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| case apiKey.QueryParam != nil: | |
| // Query parameter injection cannot use Envoy Gateway's credentialInjection filter; | |
| // embed directly in the URL rewrite path. | |
| // TODO: evaluate alternatives to avoid embedding the secret in the HTTPRoute manifest. | |
| apiKeyLiteral, err := c.readAPIKey(ctx, mcpRoute.Namespace, apiKey) | |
| if err != nil { | |
| return gwapiv1.HTTPRouteRule{}, fmt.Errorf("failed to read API key for backend %s: %w", ref.Name, err) | |
| } | |
| fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr, *apiKey.QueryParam, apiKeyLiteral) | |
| case apiKey.QueryParam != nil: | |
| // Query parameter injection cannot use Envoy Gateway's credentialInjection filter; | |
| // embed directly in the URL rewrite path. | |
| // TODO: evaluate alternatives to avoid embedding the secret in the HTTPRoute manifest. | |
| apiKeyLiteral, err := c.readAPIKey(ctx, mcpRoute.Namespace, apiKey) | |
| if err != nil { | |
| return gwapiv1.HTTPRouteRule{}, fmt.Errorf("failed to read API key for backend %s: %w", ref.Name, err) | |
| } | |
| fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr, | |
| url.QueryEscape(*apiKey.QueryParam), url.QueryEscape(apiKeyLiteral)) |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/controller/mcp_route.go` around lines 596 - 604, URL 쿼리 파라미터를 구성하는
`fullPathPtr` 업데이트에서 `apiKeyLiteral`을 삽입하기 전에 `url.QueryEscape`로 인코딩하세요.
`apiKey.QueryParam` 이름과 기존 경로·오류 처리 흐름은 유지하고, Secret 평문을 HTTPRoute 매니페스트에 기록하는
기존 TODO는 별도 이슈 추적 대상으로 남겨두세요.
| // matchesTo checks if a ReferenceGrantTo matches the target resource identified by targetGroup/targetKind. | ||
| func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind) bool { | ||
| // Check group | ||
| if to.Group != aiServiceBackendGroup { | ||
| if to.Group != targetGroup { | ||
| return false | ||
| } | ||
|
|
||
| // Check kind | ||
| if to.Kind != aiServiceBackendKind { | ||
| if to.Kind != targetKind { | ||
| return false | ||
| } | ||
|
|
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
to.Name이 지정된 ReferenceGrant도 무조건 허용됩니다.
Gateway API 스펙에서 ReferenceGrantTo.Name이 설정되면 해당 이름의 리소스만 허용해야 합니다. 현재는 group/kind만 비교하므로, 특정 InferencePool/AIServiceBackend 하나만 허용하려는 grant가 같은 kind의 모든 리소스를 허용하게 됩니다. 이번 변경으로 이 과허용이 InferencePool 참조까지 확대됩니다.
🔒 제안 수정 (targetName 전달 필요)
-func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind) bool {
+func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind, targetName string) bool {
// Check group
if to.Group != targetGroup {
return false
}
// Check kind
if to.Kind != targetKind {
return false
}
+
+ // When Name is set, only that specific resource is allowed.
+ if to.Name != nil && *to.Name != "" && string(*to.Name) != targetName {
+ return false
+ }
return true
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // matchesTo checks if a ReferenceGrantTo matches the target resource identified by targetGroup/targetKind. | |
| func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind) bool { | |
| // Check group | |
| if to.Group != aiServiceBackendGroup { | |
| if to.Group != targetGroup { | |
| return false | |
| } | |
| // Check kind | |
| if to.Kind != aiServiceBackendKind { | |
| if to.Kind != targetKind { | |
| return false | |
| } | |
| // matchesTo checks if a ReferenceGrantTo matches the target resource identified by targetGroup/targetKind. | |
| func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind, targetName string) bool { | |
| // Check group | |
| if to.Group != targetGroup { | |
| return false | |
| } | |
| // Check kind | |
| if to.Kind != targetKind { | |
| return false | |
| } | |
| // When Name is set, only that specific resource is allowed. | |
| if to.Name != nil && *to.Name != "" && string(*to.Name) != targetName { | |
| return false | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/controller/referencegrant.go` around lines 162 - 173, Update
referenceGrantValidator.matchesTo to accept the target resource name and, after
validating group and kind, reject grants whose to.Name is set unless it matches
that target name; preserve wildcard behavior when to.Name is unset, and update
all callers to pass the referenced resource name.
| // Guard against negative or unreasonably large indices from a hostile upstream. | ||
| const maxContentBlocks = 1000 | ||
| if idx < 0 || idx >= maxContentBlocks { | ||
| continue | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
모든 SSE 인덱스 경로에 음수 범위 검사를 적용해야 합니다.
현재 검사는 ContentBlockStart.Index에만 적용됩니다. ContentBlockDelta.Index는 idx < len(response.Content)만 확인하므로 음수 값이 통과하고, Line 289에서 response.Content[-1] 접근으로 panic이 발생할 수 있습니다. ContentBlockStop.Index도 동일한 공통 검증을 사용하도록 수정하고 음수 delta 회귀 테스트를 추가해 주세요.
수정 예시
case event.ContentBlockDelta != nil:
idx := event.ContentBlockDelta.Index
- if idx < len(response.Content) {
+ if idx >= 0 && idx < len(response.Content) {
block := &response.Content[idx]
delta := event.ContentBlockDelta.Delta🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/tracing/openinference/anthropic/messages.go` around lines 273 - 277,
Apply the same shared index validation used for ContentBlockStart.Index to every
SSE index path, including ContentBlockDelta.Index and ContentBlockStop.Index, so
negative and unreasonably large values are skipped before indexing
response.Content. Add a regression test covering a negative delta index and
verifying no panic occurs.
| if u.OutputTokens >= 0 { | ||
| a.streamingTokenUsage.SetOutputTokens(uint32(u.OutputTokens)) //nolint:gosec | ||
| } | ||
| // Merge the input/cache counts per field rather than replacing the whole usage snapshot: | ||
| // a delta may report only the fields that apply (the rest arrive as zero), so overwriting | ||
| // every field would clobber values already set on message_start. We can only treat a field | ||
| // as "present" when it is non-zero, since the upstream usage fields are not pointers. | ||
| if u.InputTokens > 0 || u.CacheReadInputTokens > 0 || u.CacheCreationInputTokens > 0 { | ||
| // The unified input_tokens is the sum of raw input + cache-read + cache-creation, so | ||
| // recover the latest known value of each component and overwrite only the ones present | ||
| // on this delta before recomputing the sum. | ||
| cacheRead, _ := a.streamingTokenUsage.CachedInputTokens() | ||
| cacheCreation, _ := a.streamingTokenUsage.CacheCreationInputTokens() | ||
| unifiedInput, _ := a.streamingTokenUsage.InputTokens() | ||
| var rawInput uint32 | ||
| if unifiedInput >= cacheRead+cacheCreation { | ||
| rawInput = unifiedInput - cacheRead - cacheCreation | ||
| } | ||
|
|
||
| if u.InputTokens > 0 { | ||
| rawInput = uint32(u.InputTokens) //nolint:gosec | ||
| } | ||
| if u.CacheReadInputTokens > 0 { | ||
| cacheRead = uint32(u.CacheReadInputTokens) //nolint:gosec | ||
| } | ||
| if u.CacheCreationInputTokens > 0 { | ||
| cacheCreation = uint32(u.CacheCreationInputTokens) //nolint:gosec | ||
| } | ||
|
|
||
| a.streamingTokenUsage.SetCachedInputTokens(cacheRead) | ||
| a.streamingTokenUsage.SetCacheCreationInputTokens(cacheCreation) | ||
| a.streamingTokenUsage.SetInputTokens(rawInput + cacheRead + cacheCreation) |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
토큰 수를 uint32로 변환하기 전에 상한을 검증하세요.
현재 음수만 일부 걸러내므로 math.MaxUint32를 초과하는 provider 값과 rawInput + cacheRead + cacheCreation 합계가 조용히 wrap됩니다. 잘못된 스트리밍 사용량이 기록되지 않도록 범위 검증 후 오류 처리 또는 안전한 상한 처리를 적용하세요.
🧰 Tools
🪛 ast-grep (0.44.1)
[warning] 186-186: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.OutputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.
(integer-overflow-narrowing-conversion-go)
[warning] 205-205: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.InputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.
(integer-overflow-narrowing-conversion-go)
[warning] 208-208: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.CacheReadInputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.
(integer-overflow-narrowing-conversion-go)
[warning] 211-211: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.CacheCreationInputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.
(integer-overflow-narrowing-conversion-go)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/translator/anthropic_anthropic.go` around lines 186 - 217, Validate
all provider token counts against the uint32 range before conversions in the
streaming usage update block, including OutputTokens and each input/cache field;
reject, error, or safely clamp out-of-range values rather than wrapping. Also
guard the rawInput + cacheRead + cacheCreation sum against uint32 overflow
before passing it to SetInputTokens, while preserving valid usage updates in the
surrounding streaming token handling.
Source: Linters/SAST tools
| t.Run("system message is added to existing system param", func(t *testing.T) { | ||
| body := &anthropicschema.MessagesRequest{ | ||
| System: &anthropicschema.SystemPrompt{Text: "You are Claude."}, | ||
| Messages: []anthropicschema.MessageParam{ | ||
| {Role: "system", Content: anthropicschema.MessageContent{Text: "Be concise."}}, | ||
| {Role: anthropicschema.MessageRoleUser, Content: anthropicschema.MessageContent{Text: "Hi"}}, | ||
| }, | ||
| } | ||
| result := promoteAnthropicSystemMessagesToParam(body) | ||
| require.Len(t, result, 1) | ||
| require.NotNil(t, body.System) | ||
| // The existing system param is overwritten by the promoted messages. | ||
| require.Equal(t, "Be concise.", body.System.Text) | ||
| }) |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
서브테스트 이름과 실제 검증 동작이 반대입니다.
이름은 "added to existing system param"인데 단정문은 기존 값("You are Claude.")이 사라지고 "Be concise."만 남는 덮어쓰기를 고정하고 있습니다. promoteAnthropicSystemMessagesToParam의 유실 동작(해당 파일 코멘트 참고)을 수정하면 기대값과 이름을 함께 갱신해야 합니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/translator/anthropic_awsbedrock_test.go` around lines 1561 - 1574,
The subtest name and assertion in “system message is added to existing system
param” describe conflicting behavior. After fixing
promoteAnthropicSystemMessagesToParam to preserve and combine the existing
System prompt with promoted system messages, update this test’s expected
System.Text assertion to verify both values rather than the overwritten value.
| if len(systemTexts) > 0 { | ||
| systemText := strings.Join(systemTexts, "\n") | ||
| body.System = &anthropicschema.SystemPrompt{Text: systemText} | ||
| } | ||
| return filtered |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
promoteAnthropicSystemMessagesToParam이 기존 top-level system을 덮어쓰며, 테스트가 그 유실을 고정하고 있습니다. 하나의 루트 원인은 승격 결과를 기존 body.System과 병합하지 않고 무조건 대체하는 것입니다.
internal/translator/anthropic_awsbedrock.go#L184-L188: 기존body.System의 텍스트를 유지한 뒤 승격된 텍스트를 이어붙이도록 변경하세요.internal/translator/anthropic_awsbedrock_test.go#L1561-L1574: 병합 동작을 기대하도록 단정문을 수정하고 서브테스트 이름과 주석도 일치시키세요.
📍 Affects 2 files
internal/translator/anthropic_awsbedrock.go#L184-L188(this comment)internal/translator/anthropic_awsbedrock_test.go#L1561-L1574
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/translator/anthropic_awsbedrock.go` around lines 184 - 188, Update
promoteAnthropicSystemMessagesToParam in
internal/translator/anthropic_awsbedrock.go:184-188 to preserve existing
body.System text and append the promoted system text instead of replacing it.
Update the related assertions, subtest name, and comments in
internal/translator/anthropic_awsbedrock_test.go:1561-1574 to expect the merged
result.
| // Structured outputs are available on Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, | ||
| // Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5, and Claude Haiku 4.5. | ||
| // See: https://platform.claude.com/docs/en/build-with-claude/structured-outputs | ||
| var outputConfigModels = []string{ | ||
| "opus-4-5", // Claude Opus 4.5 | ||
| "sonnet-4-5", // Claude Sonnet 4.5 | ||
| "haiku-4-5", // Claude Haiku 4.5 | ||
| "opus-4-6", // Claude Opus 4.6 | ||
| "sonnet-4-6", // Claude Sonnet 4.6 | ||
| "opus-4-5", // Claude Opus 4.5 | ||
| "sonnet-4-5", // Claude Sonnet 4.5 | ||
| "haiku-4-5", // Claude Haiku 4.5 | ||
| "opus-4-6", // Claude Opus 4.6 | ||
| "sonnet-4-6", // Claude Sonnet 4.6 | ||
| "opus-4-7", // Claude Opus 4.7 | ||
| "opus-4-8", // Claude Opus 4.8 | ||
| "sonnet-5", // Claude Sonnet 5 | ||
| "fable-5", // Claude Fable 5 | ||
| "mythos-5", // Claude Mythos 5 | ||
| "mythos-preview", // Claude Mythos Preview | ||
| } | ||
|
|
||
| func outputConfigAvailable(model internalapi.RequestModel) bool { | ||
| return modelContainsAny(model, outputConfigModels) | ||
| } | ||
|
|
||
| // effortModels lists model identifiers that support the output_config.effort parameter. | ||
| // The effort parameter is supported by Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6, and Claude Opus 4.5. | ||
| // The effort parameter is supported by Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, | ||
| // Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, and Claude Opus 4.5. | ||
| // See: https://platform.claude.com/docs/en/build-with-claude/effort | ||
| var effortModels = []string{ | ||
| "opus-4-5", // Claude Opus 4.5 | ||
| "opus-4-6", // Claude Opus 4.6 | ||
| "opus-4-7", // Claude Opus 4.7 | ||
| "opus-4-8", // Claude Opus 4.8 | ||
| "sonnet-4-6", // Claude Sonnet 4.6 | ||
| "sonnet-5", // Claude Sonnet 5 | ||
| "fable-5", // Claude Fable 5 | ||
| "mythos-5", // Claude Mythos 5 | ||
| "mythos-preview", // Claude Mythos Preview | ||
| } |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🌐 Web query:
Claude structured outputs and output_config effort supported models list
💡 Result:
As of July 28, 2026, Claude structured outputs are generally available (GA) and rely on the output_config.format parameter [1][2]. The previous top-level output_format parameter and associated beta headers (e.g., structured-outputs-2025-11-13) are deprecated and may cause 400 errors [1][2][3]. The output_config object can also support an effort parameter alongside format, allowing you to specify the model's processing effort (e.g., "low", "medium", "high", "max") [2][4]. Supported Models Structured outputs are generally available across Anthropic's current model lineup, including: - Claude Opus 5, Opus 4.8, Opus 4.7, Opus 4.6, and Opus 4.5 [1][5] - Claude Sonnet 5, Sonnet 4.6, and Sonnet 4.5 [1][5] - Claude Haiku 4.5 [1][5] - Claude Mythos 5 and Claude Mythos Preview [1][5] - Claude Fable 5 [1] Note: Feature support can vary slightly by deployment platform (e.g., native Claude API, Amazon Bedrock, Google Cloud Vertex AI, or Microsoft Foundry) [1][6]. For the most accurate, real-time verification of supported capabilities for a specific model ID, it is recommended to query the Anthropic Models API directly [5]. Implementation Details - Parameter Structure: Use output_config: {"format": {"type": "json_schema", "schema": {...}}, "effort": "..."} [2][4]. - Schema Requirements: The schema must be a valid JSON Schema [1]. Limitations include requiring additionalProperties: false for all objects and the exclusion of certain complex constraints (like specific string-length or numerical range limits) [6][4]. - SDK Integration: Most current SDKs require the use of output_config directly, though some helper methods (like Python's client.messages.parse()) may internally map legacy parameters for convenience [7].
Citations:
- 1: https://platform.claude.com/docs/en/build-with-claude/structured-outputs
- 2: https://github.com/0xdarkmatter/claude-mods/blob/main/skills/claude-api-ops/references/structured-outputs.md
- 3: security-guidance: _call_claude sends deprecated top-level output_format → 400 on every hook fire (guardrail fails open) anthropics/claude-plugins-official#2098
- 4: https://vercel.com/docs/ai-gateway/sdks-and-apis/anthropic-messages-api/structured-outputs
- 5: https://github.com/anthropics/skills/blob/main/skills/claude-api/shared/models.md
- 6: https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/partner-models/claude/structured-outputs
- 7: https://platform.claude.com/docs/en/build-with-claude/structured-outputs?_rsc=1ebj0
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Map the relevant file first.
ast-grep outline internal/translator/anthropic_helper.go --view expanded
# Find the helper and related model-matching logic.
rg -n "func modelContainsAny|modelContainsAny\\(|outputConfigModels|effortModels|outputConfigAvailable|effort" internal/translator/anthropic_helper.go internal/translator -SRepository: inflearn/ai-gateway
Length of output: 14285
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sed -n '608,670p' internal/translator/anthropic_helper.go
printf '\n--- tests ---\n'
sed -n '730,780p' internal/translator/anthropic_helper_test.go
printf '\n--- more tests ---\n'
sed -n '1138,1168p' internal/translator/anthropic_helper_test.go
printf '\n--- build params tests ---\n'
sed -n '1268,1495p' internal/translator/anthropic_helper_test.goRepository: inflearn/ai-gateway
Length of output: 13638
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sed -n '687,760p' internal/translator/anthropic_helper.go
printf '\n--- model override helpers ---\n'
rg -n "ModelNameOverride|featureCheckModel|modelNameOverride|normalize.*model|RequestModel" internal -SRepository: inflearn/ai-gateway
Length of output: 48155
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sed -n '680,760p' internal/translator/anthropic_helper_test.go
printf '\n---\n'
sed -n '1120,1165p' internal/translator/anthropic_helper_test.goRepository: inflearn/ai-gateway
Length of output: 3166
opus-5를 outputConfigModels에 추가하세요. 현재 문서 기준으로 Claude Opus 5도 structured outputs를 지원하므로, 이 항목이 빠지면 해당 모델에서 OutputConfig가 비활성화됩니다. modelContainsAny의 부분 문자열 매칭은 벤더 접두사/버전 접미사가 붙은 실제 모델명을 처리하려는 의도라 그대로 두면 됩니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/translator/anthropic_helper.go` around lines 624 - 659, Update the
outputConfigModels list used by outputConfigAvailable to include the opus-5
model identifier, while leaving modelContainsAny substring matching and the
effortModels list unchanged.
| // Set all input token counts (input, cache read, cache creation) from message_start. | ||
| // message_delta may also contain these fields but only output_tokens is used from it. |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
주석이 변경된 동작과 모순됩니다.
이제 message_delta에서 input_tokens/캐시 토큰도 반영하므로(1138) "only output_tokens is used from it"은 사실과 다릅니다.
📝 주석 수정 제안
// Set all input token counts (input, cache read, cache creation) from message_start.
- // message_delta may also contain these fields but only output_tokens is used from it.
+ // message_delta may report corrected/late values for these fields; those are merged
+ // per field later via updateInputUsageFromMessageDelta.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Set all input token counts (input, cache read, cache creation) from message_start. | |
| // message_delta may also contain these fields but only output_tokens is used from it. | |
| // Set all input token counts (input, cache read, cache creation) from message_start. | |
| // message_delta may report corrected/late values for these fields; those are merged | |
| // per field later via updateInputUsageFromMessageDelta. |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/translator/anthropic_helper.go` around lines 1051 - 1052, Update the
comment near the message_start token handling to reflect that message_delta also
supplies input_tokens and cache token counts, as implemented in the
message_delta handling around the relevant token update logic; remove the
inaccurate statement that only output_tokens is used from message_delta.
| `"inlineData"`, | ||
| `"mimeType":"image/png"`, | ||
| }, | ||
| wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileURI"`}, |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
"fileURI" 단정은 실제로 아무것도 검증하지 못합니다.
genai가 직렬화하는 키는 fileUri(라인 449에서 확인)이므로 "fileURI"에 대한 NotContains는 항상 통과합니다. data URI 케이스에서 파일 URI가 생성되지 않았음을 확인하려면 실제 키 표기를 써야 합니다.
💚 제안 수정
- wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileURI"`},
+ wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileUri"`},📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileURI"`}, | |
| wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileUri"`}, |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/translator/openai_gcpvertexai_embeddings_test.go` at line 482,
Update the wantBodyNotContain assertions in the data URI test to use the
serialized key "fileUri" instead of "fileURI", ensuring the test actually
verifies that no file URI field is generated.
| // Apply global title to all instances if specified. | ||
| if openAIReq.Title != "" { | ||
| for _, instance := range instances { | ||
| instance.Title = openAIReq.Title | ||
| } | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
글로벌 title이 RETRIEVAL_DOCUMENT 이외 task type에도 무조건 적용됩니다.
같은 파일의 per-item 경로(라인 61-65, 74-76)는 GCP 제약에 따라 TaskType == RETRIEVAL_DOCUMENT일 때만 Title을 설정합니다. 반면 여기서는 task type과 무관하게 모든 instance에 title을 붙이므로, 예를 들어 taskType: SEMANTIC_SIMILARITY + title 조합이면 Vertex AI가 요청을 거부할 수 있습니다. 같은 게이트를 적용하는 편이 일관됩니다.
🐛 제안 수정
// Apply global title to all instances if specified.
- if openAIReq.Title != "" {
+ // Title is only valid with task_type=RETRIEVAL_DOCUMENT.
+ if openAIReq.Title != "" {
for _, instance := range instances {
- instance.Title = openAIReq.Title
+ if instance.TaskType == openai.EmbeddingTaskTypeRetrievalDocument {
+ instance.Title = openAIReq.Title
+ }
}
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Apply global title to all instances if specified. | |
| if openAIReq.Title != "" { | |
| for _, instance := range instances { | |
| instance.Title = openAIReq.Title | |
| } | |
| } | |
| // Apply global title to all instances if specified. | |
| // Title is only valid with task_type=RETRIEVAL_DOCUMENT. | |
| if openAIReq.Title != "" { | |
| for _, instance := range instances { | |
| if instance.TaskType == openai.EmbeddingTaskTypeRetrievalDocument { | |
| instance.Title = openAIReq.Title | |
| } | |
| } | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@internal/translator/openai_gcpvertexai_embeddings.go` around lines 148 - 153,
Update the global title application in the instance-building flow to set Title
only when the request task type is RETRIEVAL_DOCUMENT, matching the existing
per-item handling. Preserve the current iteration and empty-title guard, and
prevent titles from being added for other task types such as
SEMANTIC_SIMILARITY.
Summary
Cherry-pick 12 upstream bug fixes landed on
envoyproxy/ai-gateway:mainbetween v1.0.0 (2026-06-26) and 2026-07-27. Feats, deps bumps, docs, and one large refactor (envoyproxy#1865 ext_proc config split — conflicts with our fork-specific mainlib and needs separate work) are intentionally excluded.Depends on #4 (v1.0.0 integration).
Included commits (chronological)
Safety / robustness
54fe80edfix: treat empty body as non-fatal in decodeContentIfNeeded (fix: treat empty body as non-fatal in decodeContentIfNeeded envoyproxy/ai-gateway#2291)190a01b8fix: return error instead of panic on streaming marshal failure (fix: return error instead of panic on streaming marshal failure envoyproxy/ai-gateway#2289)Controller / namespacing
cb0749ccfix: dedup candidate namespaces in getObjectsForGateway (fix: dedup candidate namespaces in getObjectsForGateway envoyproxy/ai-gateway#2304)1fd5f463fix: honor namespace on cross-namespace InferencePool backendRef (fix: honor namespace on cross-namespace InferencePool backendRef envoyproxy/ai-gateway#2339)902d91a2fix(extensionserver): handle per-backend route clusters (fix(extensionserver): handle per-backend route clusters envoyproxy/ai-gateway#2348)Anthropic
4d1e7b9dfix: prevent double counting of Anthropic streaming cache tokens (fix: prevent double counting of Anthropic streaming cache tokens envoyproxy/ai-gateway#2236)343fc5c5fix: sync claude model list for structured output and effort capability (fix: sync claude model list for strucutured output and effort capability envoyproxy/ai-gateway#2382)fe3afed7fix(translator): preserve tool result cache control (fix(translator): preserve tool result cache control envoyproxy/ai-gateway#2358)8ab2c830fix(translator): merge input/cache token usage reported on Anthropic message_delta (fix(translator): merge input/cache token usage reported on Anthropic message_delta envoyproxy/ai-gateway#2292)Gemini
0e54a598fix: add reasoning tokens into token metrics in stream mode for gemini models (fix: add reasoning tokens into token metrics in stream mode for gemini models envoyproxy/ai-gateway#2259)93b438c3translator: accept thinking_blocks signatures and fall back to skip_thought_signature_validator for Gemini function calls (translator: accept thinking_blocks signatures and fall back to skip_thought_signature_validator for Gemini function calls envoyproxy/ai-gateway#2366)36fea2bcfix: fix tool-calls finish reason conversion in streaming mode for newer gemini models like gemini-3.5-flash (fix: fix tool-calls finish reason conversion in streaming mode for newer gemini models like gemini-3.5-flash envoyproxy/ai-gateway#2399)Excluded
f91bb5b8fix: split the ext proc config to avoid k8s size limits (fix: split the ext proc config to avoid k8s size limits envoyproxy/ai-gateway#1865) — conflicts with fork-specificcmd/extproc/mainlib/main.goprefix registrations (cachedContents/region extractors). Needs a dedicated merge session./tokenize, stream idle timeout, per-request creds, name field on rules, etc.) and deps bumps — defer to next upstream tag / v1.1 integration.Verified
go build ./... && go vet ./...✓internal/translator,internal/extproc,internal/extensionserver,internal/controller,internal/controller/{rotators,tokenprovider}.Test plan
🤖 Generated with Claude Code
Summary by CodeRabbit
새로운 기능
버그 수정
보안